Как отключить мой последний коммит в git

Как я могу раскрыть мой последний коммит в git?

Это

git reset --hard HEAD

или

git reset --hard HEAD^
513
задан richard 17 мая '10 в 1:26
источник поделиться
8 ответов

Если вы не совсем уверены в том, что вы подразумеваете под "uncommit" и не знаете, хотите ли вы использовать git reset, см. "Возврат к предыдущему Git commit".

Если вы пытаетесь понять git reset лучше, см. "Можете ли вы объяснить, что означает "git reset" на простом английском языке?".


Если вы знаете, что хотите использовать git reset, все равно зависит от того, что вы подразумеваете под "uncommit". Если все, что вы хотите сделать, это отменить акт совершения, оставив все остальное неповрежденным, используйте:

git reset --soft HEAD^

Если вы хотите отменить акт совершения и все, что вы поставили, но оставьте рабочее дерево (ваши файлы нетронутыми):

git reset HEAD^

И если вы действительно хотите полностью его отменить, выбросить все незафиксированные изменения, сбросив все до предыдущего фиксации (в качестве исходного вопроса):

git reset --hard HEAD^

Оригинальный вопрос также спросил его HEAD^ not HEAD. HEAD относится к текущей фиксации - как правило, к кончику выделенной ветки. ^ - это обозначение, которое может быть привязано к любому спецификатору фиксации и означает "фиксация до". Таким образом, HEAD^ является фиксацией перед текущим, так же как master^ является фиксацией перед концом главной ветки.

Здесь часть git -rev-parse documentation, описывающая все способы указания коммитов (^ - это просто основной среди многих).

838
ответ дан Jefromi 17 мая '10 в 3:52
источник поделиться

Чтобы сохранить изменения от фиксации, которую вы хотите отменить

git reset --soft HEAD^

Чтобы уничтожить изменения от фиксации, которую вы хотите отменить

git reset --hard HEAD^

Вы также можете сказать

git reset --soft HEAD~2

чтобы вернуться 2 коммита.

Изменить: как упоминалось в charsi, если вы находитесь в Windows, вам нужно будет поместить HEAD или передать хэш в кавычки.

git reset --soft "HEAD^"
git reset --soft "asdf"
198
ответ дан Alex Kinnee 20 нояб. '12 в 22:12
источник поделиться

Это последнее.

git reset --hard HEAD^, если вы хотите также отбросить сделанные вами изменения. git reset --soft HEAD^ сохранит измененные изменения в рабочем дереве.

82
ответ дан nfm 17 мая '10 в 1:29
источник поделиться

Будьте осторожны, reset --hard также удалит ваши локальные (незафиксированные) модификации.

git reset --hard HEAD^

Примечание: если вы находитесь в окнах, вам нужно будет указать HEAD ^ так

git reset --hard "HEAD^"
38
ответ дан tgeros 17 мая '10 в 1:28
источник поделиться

Просто заметьте - если вы используете ZSH и видите ошибку

zsh: no matches found: HEAD^

Вам нужно избежать ^

git reset --soft HEAD\^
18
ответ дан dax 12 сент. '13 в 15:54
источник поделиться

Если вы еще не нажали свои изменения, используйте git reset --soft [Hash for one commit] для отката к определенной фиксации. --soft сообщает git, чтобы изменения были отменены (т.е. пометить файлы как измененные). --hard сообщает git удалить отложенные изменения.

18
ответ дан Allen Kenney 23 окт. '14 в 0:07
источник поделиться

Если вы зафиксируете неверную ветвь

Пока на неправильной ветке:

  • git log -2 дает хэши 2 последних коммитов, скажем $prev и $last
  • git checkout $prev проверка правильности фиксации
  • git checkout -b new-feature-branch создает новую ветку для функции
  • git cherry-pick $last исправляет ветку с вашими изменениями

Затем вы можете выполнить один из методов, предложенных выше, чтобы удалить фиксацию из первой ветки.

11
ответ дан splendidthoughts 24 янв. '15 в 4:26
источник поделиться

Будьте осторожны с этим.

Но вы можете использовать команду rebase

git rebase -i HEAD~2

A vi откроется, и все, что вам нужно сделать, это удалить строку с фиксацией. Также можно прочитать инструкции, которые были показаны в правильной редакции @ vi, в этом режиме можно выполнить пару действий

1
ответ дан Filipe 12 авг. '14 в 17:44
источник поделиться

Другие вопросы по меткам