#git-amend-safe-or-not
Когда `git commit --amend` безопасен, а когда нет?
Что отвечать
Безопасен на **локальном коммите, который ещё не пушнут**. Amend создаёт новый коммит с новым SHA (старый становится dangling) - физически это replace, не edit. Опасен на пушнутом коммите: после amend нужен force-push, и если коллега уже базируется на старом SHA - его коммиты осиротеют. Ещё опасен с `--no-edit` без сознания что меняешь автора/timestamp: amend подменяет committer-данные, author остаётся, что может путать в blame.
Что хотят услышать
Senior должен: - объяснить что amend это **технически новый коммит**, не правка существующего - SHA меняется - назвать конкретный safe-кейс: «забыл добавить файл / опечатка в сообщении, ещё не пушнут» → `git add forgot.txt && git commit --amend --no-edit` - сказать что после amend пушнутого коммита нужен `git push --force-with-lease`, и если кто-то уже забрал старый SHA - он получит развалившуюся историю - упомянуть `git commit --amend --reset-author` для случая когда специально хочешь обновить authorstamp - назвать `git commit --fixup=<sha>` + `git rebase -i --autosquash` как более структурированный amend для не-последнего коммита
Подводные камни
- ✗ Сделать amend на пушнутом коммите без согласования - коллеги получат развалившуюся ветку
- ✗ Думать что `--no-edit` означает «ничего не меняется» - SHA всё равно новый
- ✗ Сделать amend и затем `git push` без force - получишь rejected, потом панически делаешь `git pull` и вытаскиваешь обратно старый коммит как merge
Follow-up
- ? Что вернёт `git log` после amend - старый и новый коммит или только новый?
- ? Чем `git commit --amend --reset-author` отличается от обычного amend?
- ? Когда выбрать `git commit --fixup=<sha>` вместо amend?
Глубина в базе знаний