Git School · FluxGit

שחזור ענף Git שנמחק

FluxGit ·

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

התשובה הקצרה

מחיקת ענף מסירה את ההפניה שלו, לא בהכרח את ה-commits. מצאו את ה-commit האחרון שנשמר וצרו ענף שייתן לו שם.

הדוגמה והתנאים

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

בדיקת המצב לפני שינוי

קראו את ה-reflog של HEAD ואת היסטוריית המועמד. ה-reflog של הענף נמחק איתו, אך רשומת HEAD עשויה לשמור תנועות רלוונטיות.

git reflog --date=iso
git show VERIFIED_COMMIT
git log -5 --oneline VERIFIED_COMMIT

שמירת הפניה או checkout נפרד

השתמשו ב-git branch rescue/deleted-branch VERIFIED_COMMIT כדי לתת שם בלי מעבר ענף. אין צורך לדרוס את תיקיית העבודה.

git branch rescue/deleted-branch VERIFIED_COMMIT

המסלול הראשון

בדקו עם git show ו-git log את הקצה וההיסטוריה הרצויים. אחר כך צרו מחדש את השם המקורי, אם הוא פנוי.

בחירה מכוונת בתוצאה אחרת

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

מגבלות וחריגים

clone חדש אינו מכיל את ה-reflog המקומי שלכם. תפוגת ה-reflog וניקוי אובייקטים הם מדיניות נפרדת; הימנעו מניקוי אגרסיבי בזמן השחזור.

git ls-remote --heads origin my-branch

התנגשויות וניקוי

בלי הפניה, git fsck --full --no-reflogs --unreachable עשוי למצוא commits שנשמרו. בדקו כל מועמד; הפקודה אינה יודעת איזה ענף חיפשתם.

git fsck --full --no-reflogs --unreachable

אימות התוצאה

בדקו את ההיסטוריה ואת מצב הענף שנוצר מחדש. שחזור commits אינו משחזר עריכות קובץ שמעולם לא נשמרו ב-commit.

git log -5 --oneline rescue/deleted-branch
git status --short

שאלות נפוצות

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

בדיקת הפעולה ב-FluxGit

FluxGit יכול להגן על מחיקת ענף באפליקציה. Ref journal מופעל מתעד שינויים כשה-hook המותקן פועל; עקיפת hook ומימושי Git אחרים אינם מכוסים.

תיעוד Git הרשמי

Git School · 1:51

שחזור ענף Git שנמחק באמצעות reflog

שחזרו ענף מקומי שנמחק לאחרונה באמצעות מציאת הקומיט שנשמר ויצירת ענף חדש. נציג reflog ואת Safety Timeline של FluxGit במאגר בדיקה, ונסביר מתי ה-hook המותקן של Ref journal יכול לתעד שינויי הפניות דרך שורת הפקודה של Git.

שחזור ענף Git שנמחק באמצעות reflog
הקריינות באנגלית. ב-YouTube זמינות כתוביות ידניות ב-11 שפות. התמליל הזה בעברית.

צפייה ב-YouTube — נפתח בלשונית חדשה

הוקלט במאגר בדיקה. קריינות באנגלית וכתוביות בעברית. השחזור דורש אובייקטי קומיט שנשמרו ורשומות זמינות ב-reflog או ביומן; Ref journal אינו מגבה קבצים שלא נשמרו בקומיט.

קריאת תמליל הקריינות
  1. 00:03 מחקתם ענף עם עבודה באמצעות git branch -D: שני קומיטים שלא מוזגו לשום מקום. כך משחזרים אותם.
  2. 00:13 ב־FluxGit, הענף נעלם מהרשימה.
  3. 00:17 זו הסיבה שהעבודה לא אבדה. ענף הוא תווית. git branch -D מסיר את התווית, אבל שני הקומיטים נשארים במאגר בלי ענף שמצביע עליהם. reflog עדיין זוכר אותם. צרו ענף על הקומיט האחרון, ושניהם יחזרו.
  4. 00:36 פתחו את Safety Timeline. היא מציגה את reflog במשפטים פשוטים.
  5. 00:44 ב־Find a lost commit, הקלידו חלק מההודעה. תוצאה אחת: הקומיט האחרון של הענף שנמחק.
  6. 00:52 Create branch here. ענף שחזור מצביע על הקומיט הזה, ושום דבר אחר לא זז.
  7. 00:58 שני הקומיטים חזרו לגרף.
  8. 01:02 הפעילו את Ref journal עבור המאגר הזה.
  9. 01:06 כאשר ה-hook המותקן של Git פועל, FluxGit יכול לתעד מחיקת ענפים דרך שורת הפקודה של Git, כולל פקודות במסוף או של סוכנים.
  10. 01:15 עקיפת ה-hook ומימושים אחרים של Git אינם נכללים בכיסוי.
  11. 01:19 הוא מתעד הפניות, לא קבצים שלא נשמרו בקומיט.
  12. 01:23 השחזור עדיין דורש שאובייקטי הקומיט יהיו קיימים.
  13. 01:28 במסוף: השתמשו ב־git reflog כדי למצוא את הקומיט, ואז ב־git branch עם השם הישן והקומיט הזה.
  14. 01:36 סיכום. ענף שנמחק הוא תווית שאבדה; reflog עדיין מוצא את הקומיטים. בשיעור הבא: כשסוכן בינה מלאכותית מוחק את הקוד שלכם.

מסלולים קשורים

הורדת FluxGit