Menu
Coddy logo textTech

Git Merge

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

git merge מכניס את הקומיטים מענף אחר לענף הנוכחי. כשהענף הנוכחי לא התפצל, Git מבצע fast-forward: פשוט מזיז את המצביע קדימה. כשבשני הענפים יש קומיטים חדשים, Git יוצר קומיט מיזוג שקושר את שתי ההיסטוריות יחד. בניגוד ל-rebase, merge משמר את ההיסטוריה המדויקת של שני הענפים.

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

git merge מחבר את שתי ההיסטוריות בעזרת קומיט מיזוג; שני הענפים שומרים על הקומיטים המקוריים שלהם.

תחביר

פקודהמה היא עושה
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עריכת הקבצים שיש בהם קונפליקטבחירת השורות הנכונות והסרת הסימונים
2git add <file>סימון הקונפליקט כפתור
3git commitהשלמת המיזוג

שאלות נפוצות על git merge

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

ללמוד Git עם Coddy

להתחיל