Menu
Coddy logo textTech

Git Rebase vs Merge

עודכן לאחרונה

גם git merge וגם git rebase משלבים עבודה מענף אחד בענף אחר. git merge קושר את שתי ההיסטוריות יחד עם קומיט מיזוג, ומשמר בדיוק את מה שקרה. git rebase מריץ מחדש את הקומיטים שלכם אחד אחד מעל הענף השני ויוצר היסטוריה נקייה וליניארית, אבל בתהליך הוא משכתב את הקומיטים.

כלל הזהב: לעולם אל תעשו rebase לקומיטים שאחרים כבר משכו. נסו את שתיהן בעורך הטרמינל אונליין: shell אמיתי בדפדפן.

merge רושם קומיט איחוד ושומר על הצורה האמיתית של ההיסטוריה; rebase כותב מחדש את הקומיטים שלכם לקו ישר.

זו לצד זו

התנהגותgit mergegit 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 צעד אחר צעד.
איור של שפות התכנות ב-Coddy

ללמוד Git עם Coddy

להתחיל