Как я могу отменить мой последний git add / commit? - PullRequest
17 голосов
/ 21 декабря 2010

Я отредактировал файл и сделал:

git add file.py
git commit -m 'fixed bug'

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

Как я могу отменить последнее добавление / принятие и изменить первое сообщение о коммите?

Я смотрел на git reset, git revert, git undo команды, но я не хочу испортить репо с предположением

РЕДАКТИРОВАТЬ: узнал, как это сделать: http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

1 Ответ

33 голосов
/ 21 декабря 2010

Если вы уже зафиксировали второе изменение, сначала сбросьте его:

git reset HEAD^

Теперь ваш HEAD находится на первом коммите, а содержимое ваших локальных файлов не изменяется.

git add <the file(s) for the second bug fix>
git commit --amend -m'bug fixes'

Если все отслеженные и измененные файлы должны быть включены для второго исправления ошибки, вы можете вместо этого запустить его, как обычно:

git commit -a --amend

Поправка к коммиту именно такая:

  • добавляет изменения в индексе к предыдущей фиксации (следовательно, требуется git add или -a)
  • позволяет изменить сообщение о коммите

Будьте осторожны: если вы раздали первый коммит, репо других людей станет странным. Вы не должны изменять коммит, который получил кто-то другой.


Возможно, вы также можете использовать git merge --squash, что выглядит более логично, но не обязательно проще. Используйте его, чтобы объединить ветку, содержащую ваши два коммита, с предыдущим коммитом.

Сквош работает и с git rebase.

...