במאמר האחרון על 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
זהו, עד כאן בנוגע לפיצ'ר קטן אבל אולטרא שימושי בגיט.
3 תגובות
תודה
חשוב לציין גם את git stash pop
שמחזירה את הקוד ומעיפה מהstash
ושאפשר לעשות גם git show stash@{0} לראות את הקוד
וgit stash list לראות את כל הסטאשים
תודה רבה על התוספת החשובה! 🙂