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 מלמד איפוס וביטול שינויים צעד אחר צעד.