Как отменить последний коммит в git, но сохранить мои изменения как неизменные?
Я сделал коммит, но сейчас довольно сложно увидеть, что я все изменил. Конечно, я могу сделать git diff, но я предпочел бы отменить последний коммит и сохранить все мои изменения в такте, чтобы моя IDE (PyCharm) просто показывала, какие файлы были изменены.
Так есть ли способ отменить последний коммит (действительно удалить его), но при этом сохранить мои изменения в такте? Все советы приветствуются!
3 ответа
Это звучит как работа для git reset --soft
чья помощь (git help reset
) говорит это:
--soft
Does not touch the index file nor the working tree at all
(but resets the head to <commit>, just like all modes do).
This leaves all your changed files "Changes to be
committed", as git status would put it.
Таким образом, фиксация отменена, но файлы по-прежнему выглядят так, как раньше. Ничего не ставится на индекс.
Я бы оставил --soft
в двух других ответах и идти с простым git reset @^
(или же git reset HEAD^
в более старых версиях git), по умолчанию git reset --mixed @^
, Разница в том, что мягкий сброс оставляет файлы подготовленными для коммита, что не похоже на то, что вы хотите сделать. Если вы действительно хотите отменить фиксацию, вам, вероятно, также следует отменить внесение изменений, что и происходит по умолчанию. Я нахожу это гораздо более полезным в общем случае, чем программный сброс, поэтому, вероятно, по умолчанию используется смешанный режим.
Как говорит Питер, я бы пошел с git reset --soft
который должен оставить в такте и ваш индекс, и рабочий каталог.
В вашем случае, если вы хотите вернуться назад на 1 коммит, вы можете использовать git reset --soft HEAD~
указать ветку на родительский коммит текущего HEAD; Ваш индекс и рабочий каталог все еще будут содержать ваши измененные файлы.
Удобная статья о перезагрузке: http://git-scm.com/blog/2011/07/11/reset.html