Git: изменить сообщение HEAD commit, не касаясь индекса - PullRequest
6 голосов
/ 27 декабря 2011

Я знаю, что могу использовать git commit --amend --file=path-to-my-new-message, но это также изменит поэтапные изменения. Конечно, я мог бы спрятать, а затем применить и опустить шкатулку, но есть ли более быстрое решение для изменения сообщения фиксации HEAD без фиксации поэтапных изменений (и взаимодействия с пользователем)?

Ответы [ 3 ]

7 голосов
/ 27 декабря 2011

Вы можете записать новое сообщение о коммите в файл (скажем, msg.txt) и использовать git commit-tree, например,

new_head=$(git commit-tree HEAD^{tree} -p HEAD^ <msg.txt)

git reset --soft $new_head

Это предполагает, что коммит, который вы вносите, имеет одного родителя, если не вынужно поставить дальше -p HEAD^2 -p HEAD^3 ....

Это немного некрасиво и низкий уровень.Возможно, вам будет проще сохранить ваши изменения и использовать прямую «поправку».

git stash
git commit --amend
git stash pop --index

Как подсказывает @Jefromi, вы также можете использовать временный индексный файл для операции внесения изменений, например,

* 1013.*
2 голосов
/ 28 декабря 2011

В соответствии с man-страницей git commit --amend --only без указания путей, должно работать, но для меня это не работает.В качестве обходного пути вы можете временно добавить файл и удалить его снова, исправив два раза:

touch tmp
git add tmp
git commit --amend -m "new message" tmp
git rm tmp
git commit --amend -m "new message" tmp
0 голосов
/ 27 декабря 2011

Вы можете git rebase -i HEAD^ и затем изменить pick на reword в редакторе, открытом git-rebase.После этого вам будет предложено новое сообщение о коммите.

...