כדי להמחיש את התהליכים, נבצע תרגול מודרך. תרגיל זה יעזור לך לוודא שהבנת את השלבים, וייתן לך ניסיון ראשוני בעבודה עם Git ו-GitHub:
שלב 1: שיבוט (Clone)
מאגר לדוגמה – בחר פרויקט פשוט כלשהו מ-GitHub שתרצה לבדוק (זה יכול להיות אפילו מאגר שיצרת בעצמך לניסוי, או פרויקט קוד פתוח קטן לדוגמה. למשל, ניתן ליצור ריפוזיטורי חדש בחשבון שלך עם קובץ README בלבד כדי לתרגל עליו). נניח שכתובת המאגר היא https://github.com/your_username/hello-world.git. כעת, הרץ בטרמינל את הפקודה:
שלב 2: יצירת ענף (Branch) חדש ועריכת קובץ
כעת, ניצור ענף חדש כדי להוסיף שינוי, כך שנוכל לראות כיצד מתבצע מיזוג מאוחר יותר. הרץ את הפקודה
פקודה זו יוצרת ענף חדש בשם "experiment-branch" ועוברת אליו מיידית. עכשיו ערוך אחד מהקבצים במאגר (למשל את קובץ README.md או כל קובץ טקסט אחר). הוסף שורה חדשה כלשהי המזהה שזה שינוי בענף הנסיוני, למשל: "This line was added in experiment-branch". שמור את הקובץ. כעת הוסף ותחייב את השינוי ב-Git:
(ניתן להחליף את שם הקובץ בפקודת git add אם שינית קובץ אחר).
שלב 3: חזרה לענף הראשי והכנת שינוי מתנגש
דלג בחזרה לענף הראשי (נניח שהענף הראשי נקרא main):
פתח שוב את אותו קובץ שערכת קודם (למשל README.md), וערוך בו את אותו אזור או שורה שערכת בענף "experiment-branch", אך בצורה שונה. למשל: הוסף שורה דומה אך עם תוכן שונה, או עדכן את הטקסט שהוספת בענף השני. הרעיון הוא ליצור שינוי מתנגש – שני ענפים ששינו את אותו חלק בקובץ באופן שונה. שמור את השינויים. בצע גם כאן:
כעת יש לנו שני Commits שונים בשני ענפים שונים, שנוגעים לאותו מקום בקובץ אך באופן שונה. זהו מתכון לקונפליקט במיזוג.
שלב 4: ניסיון למזג ולטפל בקונפליקט
ננסה למזג את הענף הנסיוני חזרה לענף הראשי:
כיון שענף experiment-branch מכיל שינוי שמתנגש עם השינוי שכבר נמצא בענף main, Git אמור להגיב בהודעה על Merge conflict. ההודעה תציין באילו קבצים הקונפליקט. במקרה שלנו, ב-README.md ייווצר קונפליקט. פתח את הקובץ בעריכה – תראה בו סימונים מיוחדים ש-Git הוסיף: חלק שמתחיל ב-<<<<<<< HEAD ואחריו הטקסט מגרסת ה-main, לאחר מכן מפריד ======= ואז הטקסט מגרסת experiment-branch, ולבסוף >>>>>>> experiment-branch. זה נראה בערך כך בתוך הקובץ:
כעת עליך ליישב את הקונפליקט ידנית: ערוך את הקובץ כך שיישאר רק התוכן הנכון שאתה רוצה בסופו של דבר, ומחק את כל סימוני <<<, ===, >>>. למשל, ניתן להחליט איזו מבין שתי השורות להשאיר, או לשלב ביניהן לטקסט אחד. לאחר שערכת ויישבת, שמור את הקובץ.
כדי להודיע ל-Git שפתרת את הקונפליקט, עליך לבצע Commit נוסף. ראשית, הוסף את הקובץ המעודכן (הנקי מקונפליקט) לבמה:
לאחר מכן בצע Commit למיזוג:
Git ישלים את המיזוג, והקונפליקט נפתר. אם תפתח את git log, תראה היסטוריה שבה מופיעים ה-commits משני הענפים וכן Commit המיזוג שיצרת.
כך התנסית ביצירת ענף, ביצוע שינויים במקביל, ובטיפול בקונפליקט. זהו תרחיש יומיומי בעבודה עם Git בצוות – מפתחים שונים עובדים על חלקים חופפים בקוד, ובזכות Git ניתן למזג את העבודות שלהם בצורה מבוקרת, לפתור התנגשויות באופן מסודר, ולהמשיך הלאה.