Git: как изменить сообщение коммита — последнего и старого
Сообщение последнего коммита меняется командой git commit --amend -m "Новое сообщение". Для более старого коммита нужен интерактивный git rebase -i с действием reword. Если коммит уже отправлен на сервер, потребуется принудительная отправка.
Изменить последний коммит
git commit --amend -m "Исправлена проверка пароля" # заменить сообщение
git commit --amend # открыть редактор с текущим сообщением
git log -1 --format=%s # проверить результатКоманда создаёт новый коммит вместо старого, поэтому у него изменится хеш.
Изменить старый коммит
Допустим, нужно поправить третий коммит от конца. Откройте интерактивный режим с этим диапазоном:
git rebase -i HEAD~3В открывшемся списке замените слово pick на reword у нужного коммита, сохраните файл. Git остановится на этом коммите и откроет редактор с его сообщением. После сохранения остальные коммиты будут перенесены автоматически.
Те же шаги без ручного редактирования, например в скрипте:
GIT_SEQUENCE_EDITOR="sed -i '1s/^pick/reword/'" \
GIT_EDITOR="sh -c 'echo \"Новое сообщение\" > \"\$1\"' --" \
git rebase -i HEAD~3Изменить автора коммита
git commit --amend --no-edit --author="Иван Петров <ivan@example.com>"Если коммит уже отправлен на сервер
Перепишите историю и отправьте её принудительно, но с защитой от перезаписи чужой работы:
git push --force-with-leaseКак отменить исправление
Старый коммит остаётся в журнале reflog и его можно вернуть:
git reflog # найдите запись «commit (amend)» и коммит перед ней
git reset --hard HEAD@{1} # вернуть состояние до исправленияЧастые вопросы
Можно ли изменить сообщение первого коммита в репозитории?
Да, используйте git rebase -i --root: в списке появится самый первый коммит.
Чем reword отличается от amend?
amend работает только с последним коммитом. reword внутри rebase -i позволяет изменить сообщение любого коммита из выбранного диапазона.