Git Revert
עודכן לאחרונה
git revert מבטל קומיט על ידי יצירת קומיט חדש שמחיל את ההפך מהשינויים שלו. מכיוון שהוא מוסיף היסטוריה במקום לשכתב אותה, revert הוא הדרך הבטוחה לבטל קומיט שכבר נדחף: בניגוד ל-git reset, הוא לא מאלץ את כל השאר ליישב ענף שנכתב מחדש.
נסו את הפקודות האלה בעורך הטרמינל אונליין: shell אמיתי בדפדפן, בלי להתקין כלום.
תחביר
| פקודה | מה היא עושה |
|---|---|
git revert HEAD | ביטול הקומיט האחרון |
git revert <hash> | ביטול קומיט מסוים לפי hash |
git revert HEAD~2..HEAD | ביטול טווח קומיטים |
git revert -n <hash> | ביטול בלי ליצור קומיט עדיין (רק הכנה) |
git revert -m 1 <merge-hash> | ביטול קומיט מיזוג תוך שמירה על הורה 1 |
במהלך revert
אם ה-revert נתקל בקונפליקט, פתרו אותו והמשיכו.
| פקודה | מה היא עושה |
|---|---|
git revert --continue | המשך אחרי פתרון קונפליקטים |
git revert --abort | ביטול ה-revert שבתהליך |
git revert --skip | דילוג על הקומיט הנוכחי והמשך |
revert מול reset
| התנהגות | git revert | git reset |
|---|---|---|
| משכתב היסטוריה | לא | כן |
| בטוח לקומיטים שנדחפו | כן | לא |
| יוצר קומיט חדש | כן | לא |
| מבטל קומיט מאמצע ההיסטוריה | כן | מסורבל |
שאלות נפוצות על git revert
מה ההבדל בין git revert לבין git reset?
git revert מוסיף קומיט חדש שמבטל את השינויים של קומיט קודם ומשאיר את ההיסטוריה שלמה: בטוח לקומיטים שכבר דחפתם. git reset מזיז את מצביע הענף אחורה ומשכתב היסטוריה, וזה בסדר לקומיטים מקומיים אבל מסוכן בענפים משותפים. השתמשו ב-revert כדי לבטל קומיטים ציבוריים, וב-reset כדי לבטל קומיטים מקומיים.איך מבטלים קומיט שכבר נדחף?
הריצו
git revert <hash> (או git revert HEAD לקומיט האחרון), ואז דחפו את קומיט ה-revert החדש. מכיוון ש-revert לא משכתב היסטוריה, זו הדרך הנכונה לבטל קומיט משותף: בלי force push ובלי לשבש את העבודה של חברי צוות שכבר משכו אותו.איך מבטלים קומיט מיזוג?
לקומיט מיזוג יש שני הורים, ולכן Git צריך לדעת איזה קו היסטוריה לשמור. השתמשו ב-
git revert -m 1 <merge-hash>, כאשר -m 1 אומר ל-Git לשמור את ההורה הראשון (בדרך כלל הענף שאליו מיזגתם). ביטול מיזוג מבטל את השינויים שמוזגו, אבל המיזוג עצמו נשאר בהיסטוריה.אפשר לבטל כמה קומיטים בבת אחת?
כן. העבירו טווח כמו
git revert HEAD~2..HEAD כדי לבטל את שני הקומיטים האחרונים, או פרטו כמה hash. כברירת מחדל Git יוצר קומיט revert אחד לכל קומיט שבוטל; הוסיפו -n כדי להכין את כל הביטולים בלי ליצור קומיט, ואז צרו קומיט אחד בעצמכם.אפשר לתרגל את זה אונליין?
כן. פתחו את עורך הטרמינל אונליין כדי להריץ
git revert ב-shell אמיתי בדפדפן, בלי להתקין כלום. גם קורס ה-Git האינטראקטיבי והחינמי של Coddy מלמד ביטול שינויים צעד אחר צעד.