Git School · FluxGit

ביטול commit אחרון ב-Git: soft reset או revert

FluxGit ·

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

התשובה הקצרה

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

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

בדוגמה commit רגיל שאינו merge, עם הורה בקצה הנוכחי, תיקייה נקייה וללא קבצים זרים מוכנים. לראשון אין HEAD^ ול-merge כמה הורים. אלו מחוץ לקיצור. בדקו גרף במקום להשתמש ב-HEAD~1 כביטול אוניברסלי.

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

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

git status --short
git log -3 --oneline --decorate
git show --stat HEAD

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

צרו rescue/before-undo ב-HEAD לשמירת מצב המקור המאושר. קבצים ללא commit שמרו בנפרד; ענף לא מכיל אותם. בדוגמה נקייה soft reset חושף רק שינוי זה באינדקס. אינדקס שכבר שונה יכול לערבב משימות ודורש בדיקה משלו.

git branch rescue/before-undo HEAD
SCHOOL_UNDO=$(git rev-parse HEAD)

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

במקרה המקומי השומר שינויים בצעו reset --soft HEAD^ ובדקו diff --cached. התוכן נשאר באינדקס ובתיקייה ל-commit מחודש. mixed reset משפיע אחרת על אינדקס. אל תבחרו --hard רק לקיצור התצוגה: הוא משנה גם קבצי עבודה.

git reset --soft HEAD^
git diff --cached
git status --short

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

ל-commit משותף רגיל שמרו מזהה מאומת ב-SCHOOL_UNDO ובצעו revert. החדש הופך את השינוי ושומר היסטוריה שאחרים קיבלו. בדקו תוצאה ופרויקט לפני push רגיל. merge מחייב בחירת הורה ראשי והבנת השפעות עתידיות; השתמשו בתהליך ייעודי.

git revert "$SCHOOL_UNDO"

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

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

git status
git revert --abort

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

השלכת קוד מאושר וקבצים מקומיים היא החלטה הרסנית נוספת. שמרו ובדקו מצב תחילה. עבודה ללא commit אינה ב-reflog. כש-restore points מופעלים ושינויים מקומיים זוהו, FluxGit יכול לשמור safety stash לפני hard reset נתמך; המסוף הזה לא מפעיל את מסלול ההגנה.

אימות התוצאה

אחרי soft reset השוו קצה ושינוי באינדקס לחילוץ. אחרי revert בדקו שההיפוך נוגע רק לרצוי ומשמר עבודה מאוחרת שימושית. הפעילו בדיקות ושמרו חילוץ בזמן סקירה. פקודת Git שהסתיימה ללא שגיאה אינה מוכיחה קוד נכון.

git log -4 --oneline --decorate
git status --short
git diff --cached

שאלות נפוצות

soft reset לא מוחק קבצים, אלא שומר עץ ואינדקס ומזיז הפניה. revert לא מוחק מקור אלא מוסיף שינוי הפוך. reflog עוסק במצבי הפניות מקומיים ועצמים שנותרו, לא בתוכן שרירותי של קבצים שלא נשמרו.

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

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

תיעוד Git הרשמי

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

הורדת FluxGit