Как изменить сообщение коммита
Исправить сообщение последнего коммита:
git commit --amend -m "Исправлен расчёт скидки"Без -m Git откроет редактор со старым сообщением — поправьте его, сохраните и закройте. Коммит заменится новым с тем же содержимым и новым сообщением.
Добавить в коммит забытый файл
git add forgotten.txt
git commit --amend --no-edit--amend берёт всё, что сейчас в индексе, и пересобирает последний коммит вместе с этим. --no-edit оставляет сообщение прежним.
Изменить автора последнего коммита
Если коммит сделан с неверными именем или почтой, сначала поправьте настройки (git config --global user.name и user.email), а затем пересоберите коммит с новым автором:
git commit --amend --no-edit --reset-authorЕсли коммит уже отправлен
--amend не правит коммит, а создаёт новый — с другим хешем. На сервере остался старый, и обычный git push ответит rejected (non-fast-forward), а подсказка Git предложит git pull.
Не делайте git pull после --amend отправленного коммита: Git сольёт старый и новый варианты, и в истории окажутся оба. Если ветка ваша и с ней больше никто не работает, отправьте принудительно: git push --force-with-lease. В общую ветку (main) так не отправляют — у коллег разойдётся история. Там опечатку в сообщении проще оставить.
--force-with-lease перезапишет ветку на сервере, только если с вашего последнего обмена там никто ничего не отправил.
Сообщение старого коммита
Для коммита глубже последнего нужен интерактивный rebase. Например, сообщение есть среди трёх последних:
git rebase -i HEAD~3Откроется редактор со списком коммитов, от старого к новому, — каждая строка начинается со слова pick. Замените pick на reword (или просто r) в строке нужного коммита, сохраните и закройте. Git откроет редактор ещё раз — уже с сообщением этого коммита: исправьте его, сохраните и закройте.
Rebase создаёт заново все коммиты после изменённого — у них появятся новые хеши. Для неотправленных коммитов это безопасно; для отправленных — те же правила, что выше: только своя ветка и --force-with-lease. Передумали посреди rebase — git rebase --abort.
Подводные камни
--amendменяет только последний коммит текущей ветки. Если после ошибочного коммита уже есть другие, нужен rebase, как выше.- В редакторе Vim сохранить и выйти —
Esc, затем:wqи Enter. Как сменить редактор — в уроке Установка и настройка Git. - Сделать
--amendслучайно — не беда: прежний коммит виден вgit reflog, и к нему можно вернуться черезgit reset --soft хеш.