Как изменить сообщение последнего коммита в Git
Что проверяют
Знаете ли вы про правку истории и понимаете ли, чем она опасна после публикации.
Как отвечать
Последний коммит правится так:
git commit --amend -m "Новое сообщение" # заменить сообщение
git commit --amend --no-edit # добавить забытые файлы, сообщение оставитьКлючевое, что нужно проговорить: --amend не редактирует коммит, а создаёт новый с новым идентификатором. Отсюда правила:
- коммит не запушен: правьте свободно;
- запушен, и ветка ваша личная: понадобится
git push --force-with-lease. Этот вариант безопаснее обычного--force, потому что откажет, если кто-то успел добавить в ветку свои коммиты; - запушен в общую ветку: не трогайте. Изменение сломает историю у всех, кто её уже забрал, и придётся чинить руками. Лучше сделать новый коммит с исправлением.
Полезно назвать соседние операции: git rebase -i HEAD~N для правки нескольких коммитов (в интерактивном режиме, который в этой среде недоступен), git reset --soft HEAD~1 чтобы вернуть изменения в индекс и собрать коммит заново, git revert для отмены уже опубликованного коммита без переписывания истории.
И практическое дополнение: если проект использует проверку формата сообщений или подпись коммитов, --amend их тоже перезапустит, а подпись придётся поставить заново.
Где спотыкаются
Правят опубликованную историю в общей ветке и ломают работу коллегам.
Используют --force вместо --force-with-lease и затирают чужие коммиты.
Путают --amend с новым коммитом и удивляются, что идентификатор изменился, а сборка запустилась заново.