היי @ynonp ,
אני חושב שיש לך שתי טעויות בפוסט הזה מהבלוג:
בדוגמה בפוסט יש סה"כ 7 קומיטים לפני המיזוג:
- קומיטים 1 ו-2 נוצרו ב-master אך נמצאים גם ב-dev.
- קומיטים 3 ו-4 נוצרו ב-master אחרי הפיצול של ענף dev ולכן קיימים רק ב-master.
- קומיטים: 5, 6, 7 שנוצרו וקיימים ב-dev בלבד.
בדרך הראשונה המוצגת, כתוב:
- נעבור לענף dev
- נחזיר את HEAD אחורה ל C4 בלי לשנות את הקבצים בתיקיית העבודה (עם פקודת reset)
- נעשה קומיט אחד שיכלול את כל הקבצים בתיקיית העבודה
שים לב שכתוב “נחזיר את HEAD אחורה ל C4” אבל אנחנו בענף dev שהקומיט הזה לא היה חלק ממנו.
ביצוע הפעולות הנ"ל עלול לבטל שינויים מקומיטים 3 ו-4, לדוגמה מחוק קבצים שנוספו בהם ולא קיימים בקומיט 7 (ובכול ענף dev).
לכאורה אלו אמורים להיות השלבים הנכונם:
- נעבור לענף dev
- נחזיר את HEAD אחורה ל-c2 ע"י reset
- נעשה קומיט אחד שיכלול את כל הקבצים בתיקיית העבודה.
- נעבור לענף master
- נבצע מיזוג של dev
בדרך השנייה חסר שלב (וכנראה גם לא מוזכר השלב הראשון בו עוברים לענף master).
לפחות בהתקנה רגילה של גיט, אחרי הרצת פקודת git merge --squash dev אמורה להתקבל הודעה שמספרת לנו מה קרה ובמיוחד מה לא קרה - לא בוצע קומיט (או מיזוג):
git merge --squash dev
Automatic merge went well; stopped before committing as requested
Squash commit -- not updating HEAD
כך שכרגע השינויים של המיזוג ממתינים באינדקס לביצוע קומיט (כשאפשר לראות אותם עם פקודת git status).
הפלט האחרון של git log בדוגמה בפוסט מדוייק ומראה רק את אבעת הקומיטים הראשונים שכבר היו ב-master.
השלב האחרון חסר והוא ביצוע הקומיט של “המיזוג המעוך”.
אחריו הלוג יראה כך (הוספתי לתצוגה הלוג גם את ענף dev):
λ git log --graph --oneline --all
* 37d431c (HEAD -> master) Squashed commit of the following: c5, c6, c7
* 615df2f c4
* 423ea34 c3
| * aa0dd0d (dev) c7
| * 0fdc3ff c6
| * 7de5afb c5
|/
* e04642b c2
* f7ff5de c1