Git Rebase vs Merge
עודכן לאחרונה
גם git merge וגם git rebase משלבים עבודה מענף אחד בענף אחר. git merge קושר את שתי ההיסטוריות יחד עם קומיט מיזוג, ומשמר בדיוק את מה שקרה. git rebase מריץ מחדש את הקומיטים שלכם אחד אחד מעל הענף השני ויוצר היסטוריה נקייה וליניארית, אבל בתהליך הוא משכתב את הקומיטים.
כלל הזהב: לעולם אל תעשו rebase לקומיטים שאחרים כבר משכו. נסו את שתיהן בעורך הטרמינל אונליין: shell אמיתי בדפדפן.
זו לצד זו
| התנהגות | git merge | git rebase |
|---|---|---|
| צורת ההיסטוריה | מסתעפת, עם קומיט מיזוג | ליניארית |
| משכתב קומיטים | לא | כן |
| בטוח בענפים משותפים | כן | לא |
| משמר היסטוריה מדויקת | כן | לא |
| קל לאתר מתי דברים מוזגו | כן | קשה יותר |
תחביר
| פקודה | מה היא עושה |
|---|---|
git merge feature | מיזוג feature לענף הנוכחי |
git merge --no-ff feature | תמיד ליצור קומיט מיזוג |
git rebase main | הרצה מחדש של קומיטי הענף הנוכחי מעל main |
git rebase -i HEAD~3 | עריכה אינטראקטיבית של 3 הקומיטים האחרונים |
git rebase --abort | ביטול rebase שבתהליך |
שאלות נפוצות על git rebase מול merge
מה ההבדל בין git rebase לבין git merge?
git merge משלב שני ענפים על ידי יצירת קומיט מיזוג חדש שמחבר את ההיסטוריות שלהם, ושומר תיעוד מדויק של מה שקרה. git rebase לעומת זאת מעביר את הקומיטים שלכם כך שירוצו מחדש מעל ענף אחר, ויוצר היסטוריה בקו ישר, אבל משכתב את הקומיטים האלה עם hash חדש. merge משמר היסטוריה; rebase משכתב אותה לטובת ניקיון.מתי להשתמש ב-merge ומתי ב-rebase?
השתמשו ב-merge כדי לשלב ענף שהסתיים (במיוחד ענף משותף): זה בטוח ולא הרסני. השתמשו ב-rebase כדי לסדר את הקומיטים המקומיים שלכם לפני שמשתפים אותם, או כדי לעדכן ענף פיצ'ר מעל ה-
main העדכני לקבלת היסטוריה נקייה. צוותים רבים עושים rebase מקומית ואז merge ל-main.מהו כלל הזהב של rebase?
לעולם אל תעשו rebase לקומיטים שאחרים כבר ביססו עליהם עבודה, בדרך כלל כל דבר שדחפתם לענף משותף. מכיוון ש-rebase משכתב קומיטים, זה מאלץ את כל השאר ליישב היסטוריה שהתפצלה. עשו rebase בחופשיות לקומיטים מקומיים שלא נדחפו; לכל מה שכבר ציבורי השתמשו ב-merge (או ב-revert).
האם rebase או merge גורמים לפחות קונפליקטים?
אף אחד מהם לא מונע קונפליקטים, אבל הם חושפים אותם אחרת. merge פותר את כל הקונפליקטים פעם אחת, בקומיט המיזוג. rebase עשוי לבקש מכם לפתור קונפליקטים קומיט אחר קומיט, בזמן שכל אחד מהם רץ מחדש. סך העבודה דומה; rebase פשוט מפזר אותה.
אפשר לתרגל את זה אונליין?
כן. פתחו את עורך הטרמינל אונליין כדי להריץ
git merge ו-git rebase ב-shell אמיתי בדפדפן, בלי להתקין כלום. גם קורס ה-Git האינטראקטיבי והחינמי של Coddy מלמד מיזוג ו-rebase צעד אחר צעד.