Відкат до останнього вчинення git


120

Я щойно зробив

git commit -m "blah"

потім я додав деякі файли, як мені відскакувати та видалити те, що є у моїх поточних файлах, які ще не додано / скоєно?


15
ні, це не те, що просить ОП - зрозуміло, що він хоче відкинути до останнього зобов'язання, а не скасувати останнє зобов'язання. він не сказав, що додав деякі файли, а потім зафіксував їх. так чітко він хоче останнього вчинення.
Пол

1
Надто важко знайти відповідь на це надзвичайно поширене запитання
Сем

Відповіді:


211

Caveat Emptor - попереду руйнівні команди.

Пом'якшення наслідків - git reflog може заощадити, якщо вам це потрібно.


1) Змінюється локальний файл UNDO і зберігайте останнє зобов’язання

git reset --hard

2) UNDO змінює локальний файл і ВИДАЛУЄТЬСЯ останнє зобов’язання

git reset --hard HEAD^

3) ЗБЕРІГАЙТЕ зміни місцевих файлів і ВИДАЛУЙТЕ останнє зобов’язання

git reset --soft HEAD^

20
Ця команда видалить ваш попередній комітет, тому використовуйте обережно! git reset - твердий безпечніший
rudivonstaden

9
WTF - це правильна відповідь з 36 голосами. Я щойно втратив роботу з цим ... бо я прочитав відповідь не коментар. Це не правильна відповідь на питання!
Кріс Невілл

1
Добре все не втрачено! Ви можете зробити git reflog, це дозволить вам бачити комітети, які ви зробили до скидання. Потім ви можете замовити ці зобов’язання
Кріс Невілл

3
Для чого це варто, я розтлумачив питання ОП як "як я відкатую фіксацію та видалити поточні файли", але це було і залишається неоднозначним. Я зрозумів би інакше, якби ОП просто сказала "як я
видаляю

2
Git - це антитеза твердження Алана Кейса Прості речі повинні бути простими, складні речі повинні бути можливими. ... особливо його першої частини. Все-таки дякую за вашу відповідь. це допомогло.
0xC0000022L

46

Якщо ви хочете видалити нещодавно доданий вміст та файли, які вже є поетапними (так додані до індексу), ви використовуєте:

git reset --hard

Якщо ви хочете видалити також останню команду (це повідомлення із повідомленням "blah"), тоді краще скористайтеся:

git reset --hard HEAD^

Щоб видалити незафіксовані файли (тому нові файли ще не додані до індексу) та папки використовуйте:

git clean --force -d

Git скидає - тверда голова ^ видалити останню версію фіксації назавжди? як я не можу повернутися до цього?
користувач137717

здається, "git clean --force -d" також видаляє папки .gitignored
Олексій Тимохін

15

git reset --hard змусить робочий каталог повернутися до останнього фіксації та видалити нові / змінені файли.


2
зробив це, але файли все ще є. (Файли, що не
відслідковуються,

у цьому випадку ви могли б зробити "git stash"
джектрейд

3
прихильне, оскільки це єдина чітка і однозначна відповідь на чітке та однозначне питання ОП.
Пол

4

Ви можете скасувати комісію, використовуючи git revert HEAD^для повернення до наступного до останнього. Ви також можете вказати зобов’язання відновити, використовуючи id замість HEAD ^


Це не "повертається" в тому сенсі, який ви говорите. Це створює зворотний фіксатор.
Стефан Кендалл

4

Якщо ви хочете просто скасувати останнє зобов’язання, скористайтеся цим:

git reset HEAD~

робота як шарм для мене.


2
це точна відповідь на питання
Деніз Кокабоня

це має бути затверджена відповідь
amiabl

3

Простий надійний спосіб зміни локальних файлів UNDO з останнього зобов’язання - розмістити їх у новій гілці:

git branch changes
git checkout changes
git add .
git commit

Це залишає зміни в новій галузі. Поверніться до початкової гілки, щоб повернути її до останнього комітету:

git checkout master

Нова гілка - це гарне місце для практику різних способів відновити зміни, не ризикуючи зіпсувати початкову гілку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.