Git stash

שמירה זמנית של שינויים בענף המקומי ללא צורך ב-commit.
Git logo

במאמר האחרון על Git למדנו על git alias שמאפשר לנו ליצור קיצורי דרך שימושיים. במאמר הזה אני אסביר על משהו ממש חמוד בגיט שמאפשר לנו אחסון מקומי של העבודה שלנו. git stash הוא אחסון מקומי

זה קורה בעיקר בצוותים או בחברות גדולות אבל לא רק – אני עובד לי בנחת על ה-branch שלי ואז לפתע פתאום נוחתת עלי משימה שבה אני חייב לעבור ל-branch אחר לפרק זמן קצר. יש לי מלא שינויים שעדיין לא עשיתי להם commit. מה אני יכול לעשות? אני יכול לעשות commit, אבל מה אם אני עדיין לא רוצה לעשות את זה כי עדיין זה לא מוכן ל-commit? מה אם יש לי תהליכים שקשרתי אותם ל-git? למשל – כשאני עושה git commit, אני מריץ jshint. אם הקוד שלי מלא שגיאות, אני בבעיה כי אני לא יכול לעשות commit.

הפתרון הוא פשוט – לעשות stash. הפעולה הזו היא שמירה זמנית של הקבצים שלנו ב-branch הנוכחי. אחרי הפעולה הזו אפשר בקלות לעבור ל-branch אחר, לשנות לתקן ואז לחזור ל-branch שלנו ולהחזיר את כל השינויים שעשינו.

נשמע מסובך? ממש לא. נניח שיש לי שינויים שעדיין לא עשיתי להם commit, הקלדת git stash תציג לי את הטקסט הזה:

Saved working directory and index state WIP on master: d2f6507 First commit
HEAD is now at d2f6507 First commit

מה זה אומר? גיט שומר את השינויים ומחזיר את הקבצים המקומיים לגרסה הראשונית של ה-branch. עכשיו אני יכול לעבור ל-branch אחר בלי בעיה. כשאני רוצה לחזור? מאוד קל.

$git stash list
stash@{0}: WIP on master: d2f6507 First commit

כאן תהיה רשימה של כל ה-stash שלי. אם אני רוצה לחזור לאחרון, אין קל מזה, פשוט לכתוב git stash apply

$git stash apply
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working director

        modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")

אני חוזר לאחרון והכל מעולה. אם אני רוצה לחזור ל-stash ספציפי, אני רק צריך לציין את השם שלו כפי שהוא מופיע ברשימה. למשל:

git stash apply stash@{0}

אני יכול ליצור stash עם שם קצת יותר נורמלי מהשם האוטומטי שהגיט נותן לנו

C:\Users\barzik\test\examplegit>git stash save "My stash"
Saved working directory and index state On master: My stash
HEAD is now at d2f6507 First commit

שימו לב שהרשימה של ה-stash לא נמחקת גם אחרי שעשינו apply. על מנת למחוק את ה-stash אנחנו צריכים לעשות git stash drop

git stash drop stash@{0}

אם אתם רוצים לדלג על השלב של המחיקה ופשוט למחוק אוטומטית מיד אחרי ה-apply, השתמשו בפקודה pop – זה יעשה apply וגם drop אוטומטית.

אם (כמוני) הייתם חמורים ושכחתם לעשות drop והצטבר לכם אוסף נאה של stash, אפשר בקלות להכניס את הפקודה הבאה על מנת לנקות את כל רשימת ה-stash.

git stash clear

זהו, עד כאן בנוגע לפיצ'ר קטן אבל אולטרא שימושי בגיט.

פוסטים נוספים שכדאי לקרוא

צילום מסך של סוואגר
יסודות בתכנות

openAPI

שימוש בתשתית הפופולרית למיפוי ותיעוד של API וגם הסבר בסיסי על מה זה API

גלילה לראש העמוד