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>, Конечно, предосторожность должна гарантировать, что нет никаких поэтапных изменений, как упомянуто в других ответах.

Другие вопросы по тегам