Git מחיקת ענף: כיצד להסיר ענפים מקומיים ומרוחקים

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

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

מה קורה כאשר מוחקים ענף Git?

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

אני רוצה להדגיש ש "מחיקת" ענף אינה זהה ל "מחיקת" העבודה שלך. כאשר אתה מוחק ענף ב-Git, אתה לא מוחק את ההתחייבויות, אלא רק את ההפנייה אליהן. הנה כיצד זה עובד:

  • מחיקת ענף מקומי מסירה את הענף ממאגר המידע האישי שלך. אם כל ענף אחר או תג לא מפנה להתחייבויות אלה, הן עשויות להימחק בסופו של דבר על ידי איסוף הזבל של Git.
  • מחיקת סניף רחוק מסיר את הסניף ממאגר הקוד המשותף (לדוגמה, GitHub, GitLab, Bitbucket), מה שהופך אותו ללא נגיש לשותפים. עם זאת, עותקים מקומיים של הסניף במחשבים אחרים יישארו עד שיתרשמו או יתעדכנו באופן ידני.

למה למחוק סניף?

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

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

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

מחיקת ענף Git מקומי

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

הפקודה הבסיסית למחיקת ענף מקומי

הדרך הבטוחה ביותר למחיקת ענף מקומי היא עם הקידומת -d:

git branch -d <branch_name>

שימו לב כי פקודה זו עובדת רק אם הענף ממנו נעשה מיזוג מלא לענף הנוכחי (נפוץ לרוב ענף main או master). אם ישנם שינויים שלא נמזגו, Git ימנע אתכם כדי למנוע אובדן נתונים בטעות.

מחיקת ענף מקומי בכח

אם תנסו למחוק ענף שטרם מוזגו בו שינויים, Git לא יאפשר לכם לעשות זאת אלא אם תכוחפו:

git branch -D <branch_name>

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

בדיקת שינויים שלא נמזגו לפני המחיקה

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

git branch --no-merged

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

רוצה מפתח עזר מהיר לפקודות Git, כולל מחיקת ענפים? הורד את גיליון העזר המועיל של Git.Git Cheat Sheet

.

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

הפקודה הבסיסית למחיקת ענף רחוק

כדי למחוק ענף ממאגר רחוק כגון GitHub, GitLab, או Bitbucket, יש להשתמש בפקודה הבאה:

git push origin --delete <branch_name>

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

אימות מחיקת ענף מרחוק

לאחר מחיקת ענף מרחוק, עליך לוודא שהוא באמת נמחק. ראשית, עשה fetch לעדכונים האחרונים מהמאגר המרוחק:

git fetch --prune

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

git branch -r

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

שיטות מומלצות למחיקת ענפי Git

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

להימנע ממחיקת סניפים שאינם ממוזגים מוקדם

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

git branch --no-merged

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

מחיקה לאחר מיזוג

לאחר שתכונה או תיקון נמזגו לסניף הראשי (main או master), אין סיבה לשמור על הסניף הישן. מחיקת סניפים שנמזגו עוזרת למנוע בלגן ומקלה על זיהוי אילו סניפים עדיין פעילים.

תקשר עם צוותך

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

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

בעיות נפוצות בעת מחיקת ענפי Git

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

מחיקת ענף שלא ממוזג במלואו

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

אם כבר מחקת ענף והבנת שאתה זקוק אליו, תוכל לשחזר אותו באמצעות reflog של Git:

git reflog git checkout -b <branch_name> <commit_hash>

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

מחיקת הענף הנוכחי

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

git checkout main

או, אם אתה משתמש ב-Git 2.23+:

git switch main

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

צריך להחליף בין ענפים לפני מחיקת אחד? המדריך שלנו על ביצוע checkout של ענף רחוק ב-Git מדריך אותך דרך התהליך.

מחיקת ענף רחוק בטעות

אם ענף רחוק נמחק בטעות, ניתן לשחזר אותו (בהנחה שיש לך עותק מקומי עדיין) על ידי העלאתו חזרה לרחוק:

git push origin <deleted_branch_name>

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

למה אני לא יכול למחוק ענף ב-Git?

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

  1. הדבר הראשון שכדאי לבדוק הוא האם אתה כרגע נמצא על הענף ההוא. Git לא יאפשר לך למחוק ענף שאתה פועל בו כרגע, לכן תצטרך להחליף לענף אחר תחילה.
  2. אם זה לא הבעיה, יתכן והענף עדיין מכיל שינויים שלא ממוזגו. Git מגן על ענפים עם שינויים שטרם ממוזגו, לכן, אלא אם אתה בטוח בוודאות שאינך זקוק לשינויים אלה, תצטרך למזוג או למחוק באופן כפוי את הענף באמצעות git branch -D שם-הענף.
  3. אם אתה מנסה למחוק ענף רחוק, הרצת git branch -d פשוט לא תספק את התוצאה. במקום זאת, עליך להריץ git push origin --delete branch-name, וכדי לנקות הפניות ישנות, תוכל להשתמש ב- git fetch --prune.
  4. חלק מהמאגרים, במיוחד אלה שמאוחסנים בפלטפורמות כמו GitHub או GitLab, יש ענפים מוגנים שאינם יכולים להימחק ללא שינוי בהגדרות. אם אתה עובד במאגר משותף, עשויות להיות צורך בהרשאות המתאימות כדי למחוק ענפים.

עדיין תקוע? הרצת git branch -v עשויה להעניק לך פרטים נוספים על מעמד הענף ולעזור לך להבין מה קורה לפני שתנסה שוב.

ניקוי ענפים אוטומטי עם Git

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

אוטומציה של ניקוי ענפים מרחוק

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

git fetch --prune

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

שימוש ב-Git hooks לניקוי

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

סיכום

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

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

Source:
https://www.datacamp.com/tutorial/git-delete-branch