Ответ
git commit --amend — это команда для изменения последнего коммита в текущей ветке. Она не создает новый коммит, а модифицирует существующий, заменяя его старый хеш на новый.
Типичные сценарии использования:
-
Исправить сообщение последнего коммита:
git commit --amend -m "Новое, более ясное сообщение коммита" -
Добавить забытые файлы в последний коммит:
git add забытый_файл.txt git commit --amend --no-edit # Флаг --no-edit оставляет сообщение без изменений -
Изменить содержимое коммита (изменения/удаления файлов): Внесите необходимые правки в файлы, затем:
git add . # или конкретные файлы git commit --amend --no-edit
Как это работает технически: Git создает новый коммит, который включает все изменения из предыдущего коммита плюс ваши правки. Старый коммит удаляется из истории текущей ветки (но остается доступным по своему хешу какое-то время).
КРИТИЧЕСКИ ВАЖНОЕ ПРАВИЛО:
- НЕ ИСПОЛЬЗУЙТЕ
--amendдля коммитов, которые уже были отправлены в общий удаленный репозиторий (git push).
Почему?
- Вы изменяете историю, которая уже известна другим разработчикам.
- Это вызовет конфликт при следующей попытке
git push. Вам придется делатьgit push --force, что перезапишет историю на удаленном сервере. - Коллеги, которые уже склонировали старую версию, столкнутся с проблемами при попытке синхронизации (
git pull).
Безопасный workflow:
- Работайте в своей локальной ветке.
- Свободно используйте
amendдля «причесывания» локальной истории перед интеграцией. - Только после этого делайте
git pushв общую ветку.
Альтернатива для исправления старых или опубликованных коммитов: Используйте интерактивный rebase (git rebase -i HEAD~n), но с той же осторожностью касательно уже отправленных коммитов.