Git Reset --hard
עודכן לאחרונה
git reset --hard מעביר את הענף לקומיט יעד ומכריח גם את אזור ההכנה וגם את עץ העבודה להתאים לו בדיוק, תוך מחיקת כל שינוי שלא נשמר בקומיט. זו הצורה ההרסנית ביותר של git reset, אז ודאו שאתם לא צריכים את העבודה הנוכחית לפני שאתם מריצים אותה.
איבדתם קומיט ב-reset בטעות? בדרך כלל אפשר לשחזר אחרי reset --hard בעזרת git reflog. נסו את הפקודות בבטחה בעורך הטרמינל אונליין: shell אמיתי בדפדפן.
תחביר
| פקודה | מה היא עושה |
|---|---|
git reset --hard | מחיקת כל השינויים שלא נשמרו בקומיט (נשארים ב-HEAD) |
git reset --hard HEAD~1 | השמטת הקומיט האחרון והשינויים שלו |
git reset --hard <hash> | החזרת הענף בכוח לקומיט מסוים |
git reset --hard origin/main | התאמה מדויקת של הענף המקומי לענף המרוחק |
שחזור אחרי reset --hard
עבודה שנשמרה בקומיט ואיבדתם ב-reset בדרך כלל עדיין ניתנת לשחזור.
| שלב | פקודה | תוצאה |
|---|---|---|
| 1 | git reflog | הצגת המקומות שבהם HEAD היה, עם hash |
| 2 | git reset --hard <hash> | חזרה לקומיט שלפני ה-reset |
שאלות נפוצות על git reset --hard
מה git reset --hard עושה בפועל?
הוא מעביר את הענף הנוכחי לקומיט היעד ודורס גם את אזור ההכנה וגם את עץ העבודה כך שיתאימו לו. כל שינוי שלא נשמר בקומיט, מוכן או לא, נמחק. לעומת
--soft (שמשאיר את השינויים מוכנים) ו---mixed (שמשאיר אותם לא מוכנים), --hard הוא המצב היחיד שזורק את השינויים.איך מוחקים את כל השינויים המקומיים שלי?
הריצו
git reset --hard בלי קומיט כדי לאפס את עץ העבודה לקומיט האחרון ולמחוק עריכות שלא נשמרו בקומיט. כדי לנקות גם קבצים שלא במעקב, ש-reset לא נוגע בהם, הריצו אחריו git clean -fd.איך מאפסים את הענף שלי כך שיתאים לענף המרוחק?
הריצו
git fetch ואז git reset --hard origin/main (החליפו בשם הענף שלכם). זה מכריח את הענף המקומי להתאים בדיוק לענף המרוחק, ומוחק קומיטים ושינויים מקומיים שסוטים ממנו: שימושי כשהענף המקומי השתבש ואתם פשוט רוצים את הגרסה המרוחקת.אפשר לבטל git reset --hard?
עבודה שנשמרה בקומיט בדרך כלל כן: הריצו
git reflog כדי למצוא את הקומיט שהענף הצביע עליו לפני ה-reset, ואז git reset --hard <hash> כדי לחזור אליו. שינויים שמעולם לא נשמרו בקומיט (שהיו רק בעץ העבודה) אי אפשר לשחזר, אז התייחסו ל---hard בזהירות.אפשר לתרגל את זה אונליין?
כן. פתחו את עורך הטרמינל אונליין כדי להריץ
git reset --hard ב-shell אמיתי בדפדפן, בלי להתקין כלום. גם קורס ה-Git האינטראקטיבי והחינמי של Coddy מלמד איפוס וביטול שינויים צעד אחר צעד.