Git Merge
עודכן לאחרונה
git merge מכניס את הקומיטים מענף אחר לענף הנוכחי. כשהענף הנוכחי לא התפצל, Git מבצע fast-forward: פשוט מזיז את המצביע קדימה. כשבשני הענפים יש קומיטים חדשים, Git יוצר קומיט מיזוג שקושר את שתי ההיסטוריות יחד. בניגוד ל-rebase, merge משמר את ההיסטוריה המדויקת של שני הענפים.
נסו את הפקודות האלה בעורך הטרמינל אונליין: shell אמיתי בדפדפן, בלי להתקין כלום.
תחביר
| פקודה | מה היא עושה |
|---|---|
git merge feature | מיזוג feature לענף הנוכחי |
git merge --no-ff feature | תמיד ליצור קומיט מיזוג |
git merge --ff-only feature | מיזוג רק אם אפשר לבצע fast-forward |
git merge --squash feature | איחוד הקומיטים של הענף לקומיט אחד |
git merge --abort | ביטול מיזוג עם קונפליקטים |
Fast-forward מול קומיט מיזוג
| מצב | Fast-forward | קומיט מיזוג (--no-ff) |
|---|---|---|
| יוצר קומיט חדש | לא | כן |
| שומר תיעוד של הענף | לא | כן |
| קורה כאשר | הענף הנוכחי לא התפצל | בשני הענפים יש קומיטים חדשים |
פתרון קונפליקט במיזוג
כששני הענפים שינו את אותן שורות, Git עוצר.
| שלב | פקודה | תוצאה |
|---|---|---|
| 1 | עריכת הקבצים שיש בהם קונפליקט | בחירת השורות הנכונות והסרת הסימונים |
| 2 | git add <file> | סימון הקונפליקט כפתור |
| 3 | git commit | השלמת המיזוג |
שאלות נפוצות על git merge
איך ממזגים ענף לענף אחר ב-Git?
git switch main), ואז הריצו git merge feature. Git משלב את הקומיטים מ-feature לתוך main, או באמצעות fast-forward או באמצעות יצירת קומיט מיזוג אם שני הענפים התפצלו.מה ההבדל בין fast-forward לבין קומיט מיזוג?
--no-ff כדי ליצור תמיד קומיט מיזוג, או ב---ff-only כדי לדרוש fast-forward.איך פותרים קונפליקט במיזוג?
<<<<<<<, ======= ו->>>>>>>. ערכו כל קובץ כך שיישאר התוכן הנכון והסירו את הסימונים, ואז הריצו git add על הקבצים שנפתרו ו-git commit כדי לסיים את המיזוג.איך מבטלים מיזוג?
git reset --hard ORIG_HEAD מחזיר את הענף למיקום שלפני המיזוג (בניגוד ל-HEAD~1, זה נכון גם אחרי fast-forward, אבל זה מוחק עבודה שלא נשמרה בקומיט). אם המיזוג נדחף, השתמשו ב-git revert -m 1 <merge-hash>.אפשר לתרגל את זה אונליין?
git merge ב-shell אמיתי בדפדפן, בלי להתקין כלום. גם קורס ה-Git האינטראקטיבי והחינמי של Coddy מלמד מיזוג ופתרון קונפליקטים צעד אחר צעד.