Тур по Git
Основы Git / Урок 1.9

git commit --amend --- Исправление последнего коммита

Допустили опечатку в сообщении коммита? Забыли включить файл? Флаг --amend позволяет исправить последний коммит, не создавая новый.

Исправление сообщения коммита

Если вам нужно просто переформулировать последний коммит:

git commit --amend -m "Corrected commit message"

Это заменяет старое сообщение новым. Хеш коммита изменится, потому что содержимое объекта коммита стало другим.

Добавление забытых файлов

Если вы забыли проиндексировать файл перед коммитом:

git add forgotten-file.txt
git commit --amend --no-edit

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

Что на самом деле происходит

Amend на самом деле не «редактирует» старый коммит. Git создаёт новый коммит, который заменяет предыдущий. Старый коммит становится недоступным по ссылкам и в конечном итоге будет удалён сборщиком мусора.

До amend:

A --- B (HEAD)

После amend:

A --- B' (HEAD)    (B отброшен)

Когда НЕ следует использовать amend

  • Никогда не изменяйте коммиты, которые уже отправлены в общий репозиторий. Другие люди могли основать свою работу на оригинальном коммите. Amend перепишет историю и вызовет конфликты.
  • Используйте amend только для локальных, ещё не отправленных коммитов.

Попробуйте!

Репозиторий уже инициализирован. Сделайте коммит, а затем исправьте его:

  1. Создайте файл: echo "hello" > greeting.txt
  2. Проиндексируйте и зафиксируйте с опечаткой: git add greeting.txt, затем git commit -m "Add greting file"
  3. Проверьте лог: git log --oneline (заметьте опечатку)
  4. Исправьте сообщение: git commit --amend -m "Add greeting file"
  5. Проверьте лог снова: git log --oneline (сообщение исправлено, хеш изменился)
  6. Теперь добавьте забытый файл: echo "goodbye" > farewell.txt
  7. Проиндексируйте его: git add farewell.txt
  8. Дополните коммит без изменения сообщения: git commit --amend --no-edit
  9. Убедитесь, что оба файла в последнем коммите: git log --oneline (по-прежнему один коммит впереди)

Наблюдайте, как хеш коммита меняется каждый раз при использовании amend!

🎯

Цель

Сделайте коммит, затем исправьте его с помощью amend

Terminal
$

No commits yet. Run `git init` and create your first commit.