Глиф Учебники

Как изменить сообщение коммита

Справочник · Git · 2 минуты чтения

Исправить сообщение последнего коммита:

Bash
git commit --amend -m "Исправлен расчёт скидки"

Без -m Git откроет редактор со старым сообщением — поправьте его, сохраните и закройте. Коммит заменится новым с тем же содержимым и новым сообщением.

Добавить в коммит забытый файл

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

--amend берёт всё, что сейчас в индексе, и пересобирает последний коммит вместе с этим. --no-edit оставляет сообщение прежним.

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

Если коммит сделан с неверными именем или почтой, сначала поправьте настройки (git config --global user.name и user.email), а затем пересоберите коммит с новым автором:

Bash
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. Например, сообщение есть среди трёх последних:

Bash
git rebase -i HEAD~3

Откроется редактор со списком коммитов, от старого к новому, — каждая строка начинается со слова pick. Замените pick на reword (или просто r) в строке нужного коммита, сохраните и закройте. Git откроет редактор ещё раз — уже с сообщением этого коммита: исправьте его, сохраните и закройте.

Rebase создаёт заново все коммиты после изменённого — у них появятся новые хеши. Для неотправленных коммитов это безопасно; для отправленных — те же правила, что выше: только своя ветка и --force-with-lease. Передумали посреди rebase — git rebase --abort.

Подводные камни