Исправление последнего коммита
Представьте, что вы только что сделали коммит, но тут же поняли, что забыли включить изменение в файле или допустили опечатку в сообщении коммита. Вместо того чтобы создавать новый коммит для такого мелкого исправления, Git позволяет изменить самый последний коммит с помощью опции --amend. Это похоже на небольшое возвращение в прошлое для корректировки последнего действия.
Давайте попробуем. Сначала изменим файл hello.txt, добавив еще одну строку:
echo "This is an important file." >> hello.txt
Эта команда добавляет новую строку в конец файла. Обратите внимание на оператор >>:
> перезаписал бы весь файл новым содержимым.
>> добавляет новое содержимое в конец существующего файла, сохраняя оригинал.
Теперь файл "hello.txt" содержит две строки:
Hello, Advanced Git
This is an important file.
Допустим, мы решили, что это примечание должно было быть в самом первом коммите. Мы можем "исправить" наш предыдущий коммит, включив это изменение и обновив сообщение.
git add hello.txt
git commit --amend -m "Initial commit with important note"
Разбор команд:
git add hello.txt: Мы изменили файл, поэтому его нужно снова добавить в индекс.
git commit --amend -m "Initial commit with important note": Здесь происходит магия.
git commit --amend: Флаг сообщает Git, что вместо создания нового коммита нужно изменить последний.
-m "Initial commit with important note": Новое сообщение коммита. Если не указать -m, Git откроет текстовый редактор по умолчанию для редактирования старого сообщения.
Что произошло?
Вместо появления второго коммита в истории, Git фактически заменил старый "Initial commit" новой, улучшенной версией. Старый коммит исчез, а новый содержит и исходный текст, и наше дополнение.
Проверим это, просмотрев лог:
git log --oneline
В выводе вы должны увидеть только один коммит, но с обновленным сообщением:
<commit_hash> Initial commit with important note
Нажмите q, чтобы выйти из режима просмотра лога, если он не закрылся автоматически.
Важные замечания при использовании Amend:
- Только для локальных коммитов: Исправляйте коммиты только в том случае, если вы еще не отправили (push) их в общий удаленный репозиторий (например, на GitHub). Изменение уже опубликованного коммита переписывает историю, на которую могут опираться другие участники, что приводит к путанице и конфликтам.
- Очистка локальной истории: Amend полезен для "причесывания" вашей локальной истории перед тем, как поделиться работой с командой.