Git edit /reword (без добавления / изменения файлов)
Часто я хочу отредактировать сообщение коммита без необходимости повторно выбирать набор файлов из последнего коммита.
git commit file1.c file2.c
Случайная опечатка в коммит-сообщении.
git commit file1.c file2.c --amend
Это работает, но я не хотел бы повторно выбирать набор файлов из исходного коммита, я однажды случайно сделал git commit -a --amend
и добавил много изменений непреднамеренно.
Я знаю о git rebase -i HEAD~1
затем заменить pick
с с r
(перефразировать), но это заканчивается несколькими шагами.
Есть ли способ перефразировать последний коммит за один шаг без добавления каких-либо новых файлов?
3 ответа
Исправление сообщения без поэтапных изменений
Пока у вас нет никаких изменений в вашей области подготовки, вы можете просто использовать
git commit --amend
отредактировать сообщение вашего предыдущего коммита 1.
Исправление сообщения даже при поэтапных изменениях
Однако, если у вас есть подготовленные изменения, то вы можете использовать --only
(или же -o
) флаг в сочетании с --amend
только для редактирования сообщения предыдущего коммита, без внесения поэтапных изменений:
git commit --amend --only
git commit --amend -o # Shorter
На этот вариант указал Дэвид Онгаро в своем ответе.
Документация
Как указано в git commit
документация (выделение моя):
-o --only
Выполнять фиксацию только по путям, указанным в командной строке, не обращая внимания на любое содержимое, которое было подготовлено до сих пор. Это режим работы git commit по умолчанию, если в командной строке указаны пути, и в этом случае эту опцию можно пропустить. Если эта опция указана вместе с --amend, тогда не нужно указывать пути, которые можно использовать для изменения последнего коммита без фиксации уже внесенных изменений.
1 Как уже упоминалось Minitech и другие.
Просто используйте git commit --amend
без каких-либо других аргументов. Откроется редактор, и вы сможете изменить сообщение о коммите.
Ты можешь сделать git commit --amend -m <new commit message>
, Конечно, предосторожность должна гарантировать, что нет никаких поэтапных изменений, как упомянуто в других ответах.