שחזור ענף Git שנמחק
הקטעים מתארים מקרים שונים, לא סקריפט אחד. בחרו את המקרה המתאים והחליפו שמות ענפים, נתיבים ו-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 שנמחק באמצעות reflog
שחזרו ענף מקומי שנמחק לאחרונה באמצעות מציאת הקומיט שנשמר ויצירת ענף חדש. נציג reflog ואת Safety Timeline של FluxGit במאגר בדיקה, ונסביר מתי ה-hook המותקן של Ref journal יכול לתעד שינויי הפניות דרך שורת הפקודה של Git.
צפייה ב-YouTube — נפתח בלשונית חדשה
הוקלט במאגר בדיקה. קריינות באנגלית וכתוביות בעברית. השחזור דורש אובייקטי קומיט שנשמרו ורשומות זמינות ב-reflog או ביומן; Ref journal אינו מגבה קבצים שלא נשמרו בקומיט.
קריאת תמליל הקריינות
- מחקתם ענף עם עבודה באמצעות git branch -D: שני קומיטים שלא מוזגו לשום מקום. כך משחזרים אותם.
- ב־FluxGit, הענף נעלם מהרשימה.
- זו הסיבה שהעבודה לא אבדה. ענף הוא תווית. git branch -D מסיר את התווית, אבל שני הקומיטים נשארים במאגר בלי ענף שמצביע עליהם. reflog עדיין זוכר אותם. צרו ענף על הקומיט האחרון, ושניהם יחזרו.
- פתחו את Safety Timeline. היא מציגה את reflog במשפטים פשוטים.
- ב־Find a lost commit, הקלידו חלק מההודעה. תוצאה אחת: הקומיט האחרון של הענף שנמחק.
- Create branch here. ענף שחזור מצביע על הקומיט הזה, ושום דבר אחר לא זז.
- שני הקומיטים חזרו לגרף.
- הפעילו את Ref journal עבור המאגר הזה.
- כאשר ה-hook המותקן של Git פועל, FluxGit יכול לתעד מחיקת ענפים דרך שורת הפקודה של Git, כולל פקודות במסוף או של סוכנים.
- עקיפת ה-hook ומימושים אחרים של Git אינם נכללים בכיסוי.
- הוא מתעד הפניות, לא קבצים שלא נשמרו בקומיט.
- השחזור עדיין דורש שאובייקטי הקומיט יהיו קיימים.
- במסוף: השתמשו ב־git reflog כדי למצוא את הקומיט, ואז ב־git branch עם השם הישן והקומיט הזה.
- סיכום. ענף שנמחק הוא תווית שאבדה; reflog עדיין מוצא את הקומיטים. בשיעור הבא: כשסוכן בינה מלאכותית מוחק את הקוד שלכם.