Как я могу отменить мой последний git add/commit?

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

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

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

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

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

EDIT: выяснили, как это сделать: http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

Ответы

Ответ 1

Если вы уже совершили второе изменение, reset сначала:

git reset HEAD^

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

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

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

git commit -a --amend

Внесение изменений в commit происходит именно так:

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

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


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

Скриптинг работает с git rebase.