Перейти к содержанию

Изменение последнего коммита

Довольно часто разработчики делают коммит и сразу замечают, что забыли добавить часть файлов через git add. Оставшуюся часть изменений можно добавить в следующем коммите.

Однако есть еще один метод. Если изменения еще не были отправлены во внешнюю систему, их можно добавить к текущему коммиту. Для этого во время коммита используется флаг --amend:

echo 'experiment with amend' >> INFO.md
echo 'experiment with amend' >> README.md
git add INFO.md
# Забыли сделать подготовку README.md к коммиту
git commit -m 'add content to INFO.md and README.md'

[main 256de25] add content to INFO.md and README.md
 1 file changed, 1 insertion(+)

git status

On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   README.md

# Увидели, что забыли добавить файл
# Добавляем

git add README.md
git commit --amend
# После этой команды откроется редактор, ожидающий ввода описания коммита
# Здесь можно поменять сообщение или выйти из редактора, оставив старое

[main d96151a] add content to INFO.md and README.md
 Date: Sat Sep 26 16:02:07 2020 -0400
 2 files changed, 2 insertions(+)

git status

On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

Фактически, --amend не добавляет изменения к существующему коммиту. Этот флаг вызывает отмену последнего коммита через git reset и создание нового коммита с обновленными данными. Из-за этого в истории коммитов виден только один коммит, несмотря на то, что команда git commit была запущена дважды (первый раз - для неправильного коммита).

Чтобы избежать открытия редактора для ввода нового описания коммита при использовании команды git commit --amend, можно добавить опцию --no-edit. Это предотвратит изменение описания коммита:

git add README.md
git commit --amend --no-edit

[main d96151a] add content to INFO.md and README.md
 Date: Sat Sep 26 16:02:07 2020 -0400
 2 files changed, 2 insertions(+)

Ниже запись сессии с обоими вариантами подряд. Следите за хешем коммита в выводе: он меняется после каждого --amend, хотя коммит в истории по-прежнему один:

Демонстрация

Дополнительные материалы

  1. Перезапись истории

Самостоятельная работа

  1. Выполните все шаги из урока
  2. Залейте изменения на GitHub