עדכון המאגר המקומי שלך עם Git Pull

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

מה שמגניב ב־git pull הוא שהוא משלב שני שלבים: ראשית, הוא בוצע git fetch כדי להוריד את השינויים האחרונים, ואז הוא מפעיל באופן אוטומטי git merge כדי לשלב את העדכונים אלו לסניפ שלך. אם אתה מעדיף היסטוריה נקייה בלי מיזוגים נוספים, אפשר להשתמש ב־git pull --rebase במקום.

אם אתה מחפש להבין את המושגים האלה בצורה טובה, אל תשכח לבדוק את מסלול המיומנויות החדש שלנו יסודות GitHub. בעבודה על הקורס, תלמד על היסטוריית גרסאות ועבודה עם סניפים, אבל גם, עד הסוף, תדע אפילו על אסטרטגיות מיזוג מתקדמות וניהול רפוזיטוריות.

מה זה Git Pull?

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

  1. משיכת עדכונים: Git מתחיל על ידי הפעלת git fetch כדי retrieve את כל ההתחייבויות החדשות מהרפוזיטורי המרוחק.

  2. מיזוג שינויים: לאחר מכן, הוא מבצע אוטומטית git merge כדי לשלב את ההתחייבויות שנמשכו בענף הנוכחי שלך.

  

כאן תרשים ויזואלי של תהליך Git Pull. התרשים מראה איך קיבוצים מהמאגר המרוחק (A → B → C) מתבצעים ומתמזגים לענף המקומי (A → B → D). הקו המקווקו מייצג את שלב המיזוג, בו הקיבוץ C משולב לתוך המאגר המקומי. זה ממחיש כיצד git pull שומר על כך שהענף המקומי שלך מתעדכן עם השינויים המרוחקים האחרונים.

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

Command Description
git pull משיכה ומיזוג שינויים מרוחקים לתוך הענף הנוכחי.
git pull origin <branch> מושך שינויים מענף מרוחק מסוים.
git pull --rebase משתמש ב־rebase במקום מיזוג כדי ליצור היסטוריית קיבוץ נקייה וליניארית.
git pull --no-commit

משיכה ומיזוג שינויים מרוחקים אך לא יוצר קיבוץ אוטומטי, מאפשר לך לבדוק ולשנות את התוצאה שמיזוג לפני הקיבוץ.

git pull --verbose מספק פלט מפורט במהלך פעולת ה-pull, עוזר לך לראות בדיוק אילו שינויים נמשכו.

אפשרויות אלו מציעות גמישות כך שתוכל להתאים את תהליך העדכון שלך לצרכי הפרויקט שלך. לדוגמה, אם אתה מעדיף היסטוריית commit נקייה יותר, git pull --rebase עשוי להיות ברירת המחדל שלך. או אם ברצונך לבדוק שינויים לפני המיזוג git pull --no-commit נותן לך שכבת שליטה נוספת זאת.

מניעת בעיות נפוצות ב-pull של Git

בוא נתמודד עם זה: git pull הוא מציל חיים אבל לא ללא תקלות. הנה כיצד לנווט במכשולים הנפוצים ביותר ולשמור על זריזות העבודה שלך:

קונפליקטים במיזוג

קונפליקטים במיזוג מתרחשים כאשר השינויים המקומיים שלך חופפים לשינויים ממאגר המרוחק. לדוגמה, אם אתה וחבר צוות עורכים את אותה שורה בקוד, Git לא ידע איזו גרסה לשמור. כאשר זה קורה, Git מפסיק את המיזוג ושואל אותך לפתור את הקונפליקט ידנית.  

כך פותרים את זה: 

  1. פתח את הקובץ/קבצים המושפעים וחפש סמני קונפליקט (<<<<<<<, =======, >>>>>>>).  

  2. ערוך את הקובץ כדי לשמור על השינויים הרצויים.

  3. שמור את הקובץ, הוסף אותו לשלב (git add <file>), והשלם את המיזוג (git commit).

משיכה עם שינויים שלא נשמרו

אם יש לך שינויים שלא התחייבו בתיקיית העבודה שלך, git pull עלול להיכשל כי הוא זקוק לתיקיה נקייה כדי למזג שינויים מרוחקים.  

הנה הפתרון:

1. שמור את השינויים שלך:

מאחר שgit pull דורש תיקיית עבודה נקייה, תצטרך לשמור באופן זמני את השינויים שלא התחייבו שלך באמצעות פקודת stash. זה שומר על השינויים שלך בטוחים בזמן שאתה מעדכן את הענף שלך.

git stash

2. משוך את השינויים האחרונים:

עכשיו שהתיקייה שלך נקייה, אתה יכול בבטחה למשוך ולמזג את השינויים האחרונים מהמאגר המרוחק.

git pull

3. החזר את השינויים ששמרת:

כאשר העדכון הושלם, תוכל לשחזר את השינויים ששמרת חזרה אל תיקיית העבודה שלך באמצעות git stash pop. זה יחזיר את כל מה שהיית לפני ה-"stashing".

git stash pop

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

משיכה מהענף הלא תקין

אם אתה מריץ את git pull בלי לציין ענף, Git מושך מהענף העליון שהענף המקומי שלך מעקב אחריו. אם העליון לא מוגדר נכות, ייתכן שתמשוך שינויים מענף בלתי צפוי, מה שיוביל לבלבול או שגיאות.

הנה כיצד למנוע זאת:

1. בדוק את הענף העליון:

git branch -vv

2. אם נדרש, הגדר את העליון הנכון:

git branch --set-upstream-to=origin/<branch>

תמיד וודא שלפי איזה ענף אתה משכפל, במיוחד כאשר אתה עובד עם מספר ענפים.

שיטות מומלצות לשימוש ב- Git Pull

בניית העבודה על מה שדנו בקטע הקודם לגבי כיצד להימנע מבעיות נפוצות, הנה מקראות מומלצים לעזור לך להפיק את המרב מ-git pull בזריזת העבודה היומיומית שלך:

  • משוך בתדירות: עדכן את הענף שלך באופן קבוע כדי למנוע שהקונפליקטים הגדולים יצברו. שינויים קטנים וצעדיים הרבה יותר קלים לניהול מאשר מיזוגים עצומים מאוחר יותר.

  • בדוק לפני המיזוג: הרץ git fetch קודם לראות אילו שינויים ממתינים לך. זה מאפשר לך לעבור על הקומיטים הנכנסים מבלי למזג אותם מיד, מה שנותן לך זמן להתכונן לכל התאמה.

  • לשמור על היסטוריה ליניארית: אם אתה מעדיף היסטוריית commit נקייה, השתמש ב- git pull --rebase. פקודה זו מבצעת rebase לשינויים המקומיים שלך על גבי ה-commits הרחוקים האחרונים, שומרת על ההיסטוריה של הפרויקט שלך בסדר.

  • סקירת מיזוגים: לשם זהירות נוספת, השתמש ב- git pull—- no-commit כדי לבדוק את תוצאות המיזוג לפני שתסיים אותם עם commit. פעולה זו תגלה כל סותר מוקדם.

  • אימות מעקב ענפים: תמיד רוץ git remote show origin כדי לוודא שהענף המקומי שלך מעקב אחר הענף המרוחק הנכון. בדיקה זו פשוטה עוזרת למנוע מעדכונים מהתקבל לענף הלא נכון.

למה חלק מהמפתחים נמנעים מ- git pull

בעוד ש- git pull הוא נוח, יש מפתחים המעדיפים לחלק את התהליך לשני שלבים כדי לקבל יותר שליטה:  

1. קבל קודם

git fetch

זה מושך שינויים מרוחקים מבלי למזג אותם.  

2. אינטגרציה ידנית

השתמש ב- git merge כדי לשלב שינויים:  

git merge origin/<branch>

או השתמש ב- git rebase להיסטוריה נקייה יותר:  

git rebase origin/<branch>

מסתכלים על דוגמה של Git Pull בפעולה

בואו נעבור על כמה דוגמאות מעשיות לשימוש ב-git pull כך שתוכלו לראות בדיוק כיצד הפקודות הללו פועלות בתרחישים אמיתיים.

שימוש בסיסי ב-git pull

הפקודה git pull היא הדרך הקלה ביותר לעדכן את הסניף המקומי שלכם עם השינויים האחרונים מסניף הראשי של מאגר המרוחק. היא מבצעת באופן אוטומטי git fetch לאחר מכן git merge. השתמשו בפקודה זו כדי לסנכרן את המאגר המקומי שלכם עם העדכונים החדשים ביותר מהמאגר המרוחק ללא צעדים נוספים. הרצת git pull מביאה עדכונים מהמאגר המרוחק (בדרך כלל נקרא origin) וממזגת אותם לתוך הסניף הנוכחי שלכם, ומבטיחה שהקוד המקומי שלכם יישאר מעודכן.

שימוש ב-git pull –rebase

אם אתה מעדיף היסטוריה נקייה וליניארית ללא מיזוגים מיותרים, git pull --rebase הוא הפתרון המתאים. פקודה זו מביאה שינויים מרחוק ואז מחילה מחדש את ההתחייבויות המקומיות שלך מעליהם, תוך שמירה על היסטוריית התחייבויות מסודרת. זה מועיל בפרויקטים שיתופיים שבהם יומן התחייבויות מסודר הוא חיוני. הרצת git pull --rebase מבטיחה שההתחייבויות המקומיות שלך יושמעו שוב על השינויים שהובאו, ומונעת התחייבויות מיזוג מיותרות ושומרת על היסטוריית המאגר שלך קריאה יותר.

שימוש ב-git pull –no-commit

אם אתה רוצה להביא ולמזג שינויים מרחוק אך מעדיף לבדוק אותם לפני ההתחייבות, git pull --no-commit הוא האפשרות המושלמת. פקודה זו מאפשרת לך לבדוק ידנית את תוצאות המיזוג ולפתור כל עימות לפני סיום ההתחייבות. זה מבטיח שיש לך שליטה מלאה על תהליך השילוב, מה שהופך אותו לאידיאלי לעדכונים זהירים שבהם אתה צריך לאמת שינויים לפני ההתחייבות.

משיכת נתונים מענף מרוחק ספציפי

כאשר אתה עובד על מספר ענפים, ייתכן שתצטרך לעדכן את הענף המקומי שלך עם שינויים מענף רחוק ספציפי במקום הענף הראשי ברירת המחדל. הפקודה git pull origin feature מאפשרת לך לאחזר ולמזג את השינויים האחרונים מענף שמוגדר מראש, מבטיחה כי העבודה המקומית שלך תישאר מעודכנת עם השינויים האחרונים ברחוק. זה עשוי להיות שימושי במיוחד כאשר עובדים יחד על פיתוח תכונות או תיקוני באגים בענפים שונים.

Git Pull vs. Git Fetch

כאשר אתה עובד עם Git, תתמקד בדרך כלל בפקודות git pull ו־git fetch. בעוד שהן עשויות להיראות דומות, הן שומרות על מטרות שונות. בוא נבדוק את ההבדלים כדי שתוכל להחליט מתי להשתמש בכל אחת מהן.

Understanding the difference

  • git fetch מביא שינויים ממאגר רחוק אך אינה משלבת אותם לענף העבודה שלך. היא סתם מעדכנת את העותק המקומי שלך של הענפים הרחוקים.

  • git pull עושה את אותו הדבר כמו git fetch אך מיד משלב את השינויים הנשלפים בענף הנוכחי שלך.

טבלת השוואה

Feature git fetch git pull
מה זה עושה מוריד שינויים חדשים מרחוק אך אינו משלב אותם מוריד ומיד משלב שינויים בענף הנוכחי
משנה את ספריית העבודה? לא—מעודכן את ענפי המעקב המרוחקים כן—משנה את ענף העבודה
הכי טוב עבור בדיקה אם יש שינויים מרוחקים לפני שילוב עדכון מהיר של הסניף המקומי עם השינויים האחרונים
בטוח להשתמש בכל זמן? כן, מכיוון שזה לא משפיע על העבודה המקומית לא, שכן זה עלול לגרום לקונפליקטים במיזוג
מקרה שימוש נפוץ בדיקת שינויים מרחוק לפני החלטה על מיזוג שמירה על סניפים מקומיים מעודכנים אוטומטית
תחביר פקודה git fetch origin git pull origin main

מתי להשתמש בכל אחד?

השתמש בgit fetch כדי לעיין בשינויים לפני עדכון הסניף שלך, למזג ידנית או לבצע rebasing מאוחר יותר, או להימנע ממשיכת שינויים לא יציבים בזמן עבודה על סניף תכונה. מצד שני, השתמש בgit pull כאשר אתה זקוק לעדכונים האחרונים על סניף משותף, כמו central או develop, כאשר אתה בטוח לגבי מיזוג שינויים מרחוק ללא קונפליקטים, או רוצה להישאר מסונכרן עם מאגר הצוות שלך. רבים מהמפתחים המעדיפים יותר שליטה על האינטגרציות משתמשים קודם בgit fetch, ולאחר מכן בgit merge או rebase ידנית. אם אתה מעוניין בזרימות עבודה מתקדמות ב-Git, חקר גישות מובנות יכול לשפר את אסטרטגיית בקרת הגרסאות שלך.

סיכום

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

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

בסופו של דבר, שמירה על זריזות העבודה שלך עם Git היא עניין של הבנת שינויים בין המאגרים המקומיים והמרוחקים. בין שאתה עובד בצוות על פרויקט או מנהל את המאגרים שלך, הבנת מתי למשוך, לאחזר, למזג או לעשות rebase יכולה לחסוך לך המון כאבי ראש. יש הרבה ללמוד עם Git, אבל כאן ב-DataCamp אנחנו כאן כדי לעזור. אני ממליץ על הקורס שלנו יסודות של Git ועל הקורס מבוא למושגים ב-GitHub כאפשרויות נהדרות.

Source:
https://www.datacamp.com/tutorial/git-pull