לסדר היסטוריה עם rebase (והכלל הזהב)
זה הנושא הכי מבלבל בקורס, אז נלך לאט. בשיעור הקודם ראינו merge — דרך אחת לחבר עבודה מענף, שמשאירה commit מיזוג ושומרת את שתי השושלות כפי שקרו. עכשיו נכיר דרך שנייה, git rebase: היא 'מעתיקה' את ה-commits של הענף שלך כך שיתחילו מהנקודה החדשה ביותר של ענף אחר, ומקבלת היסטוריה ישרה ונקייה — קו אחד, בלי
rebase הוא כמו לקחת את הדפים שכתבת ולהעתיק אותם מחדש בסוף המחברת המעודכנת של הצוות — כאילו כתבת אותם שם מלכתחילה. התוצאה נראית מסודרת וישרה, אבל אלה דפים חדשים. לכן לא מעתיקים מחדש דפים שכבר נתת לאחרים — אצלם נשארו הדפים הישנים, וזה ייצור בלבול.
- git rebase
- מעתיק (משחזר) את ה-commits של הענף הנוכחי כך שיתחילו מקצה ענף אחר, ובכך יוצר היסטוריה ליניארית. ה-commits המקוריים מוחלפים ב-commits חדשים עם hashים חדשים.
- היסטוריה ליניארית (linear history)
- היסטוריה שהיא קו ישר אחד של commits, בלי מזלגות ובלי commit מיזוג — כל commit יושב ישירות מעל הקודם לו.
- הכלל הזהב (golden rule)
- לעולם אל תעשה rebase ל-commits שכבר דחפת או שיתפת עם אחרים. rebase כותב מחדש hashים, ולכן הוא בטוח רק על עבודה מקומית פרטית.
- hash של commit
- המזהה הייחודי של כל commit (טביעת אצבע). אם משהו ב-commit משתנה — כולל ה-parent שלו — הוא מקבל hash חדש, ולכן הופך ל-commit אחר.
- שחזור/העתקה (replay)
- הפעולה שבה rebase לוקח כל commit שלך ומיישם אותו מחדש, אחד-אחד, מעל קצה הענף השני — כך נוצרים ה-commits החדשים.