Git:在不触及索引的情况下更改HEAD commit的消息

Mot*_*Mot 6 git commit-message commit

我知道我可以使用,git commit --amend --file=path-to-my-new-message但这也将修改分阶段的更改.当然,我可以存储并稍后应用和删除存储,但有没有更快的解决方案来更改HEAD提交消息而不提交暂存的更改(和用户交互)?

CB *_*ley 7

您可以将新的提交消息写入文件(例如msg.txt)并使用git commit-tree,例如

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

git reset --soft $new_head
Run Code Online (Sandbox Code Playgroud)

这假定您要修改的提交有一个父级,如果不是,则需要进一步提供-p HEAD^2 -p HEAD^3 ....

它有点丑陋和低级别.您可能会发现更容易隐藏更改并使用直接"修改".

git stash
git commit --amend
git stash pop --index
Run Code Online (Sandbox Code Playgroud)

正如@Jefromi建议的那样,您也可以使用临时索引文件进行修改操作,例如

GIT_INDEX_FILE=.git/tmpidx git reset
GIT_INDEX_FILE=.git/tmpidx git commit --amend
rm .git/tmpidx
Run Code Online (Sandbox Code Playgroud)


mst*_*rap 2

根据手册页,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
Run Code Online (Sandbox Code Playgroud)