我知道我可以使用git commit --amend --file=path-to-my-new-message
,但这也会修改分阶段的更改。当然,我可以存储并稍后应用和删除存储,但是有没有更快的解决方案来更改 HEAD 提交消息而不提交分阶段的更改(和用户交互)?
问问题
402 次
3 回答
7
您可以将新的提交消息写入文件(例如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 建议的那样,您还可以使用临时索引文件进行修改操作,例如
GIT_INDEX_FILE=.git/tmpidx git reset
GIT_INDEX_FILE=.git/tmpidx git commit --amend
rm .git/tmpidx
于 2011-12-27T16:32:19.007 回答
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
于 2011-12-28T14:42:07.607 回答
0
您可以git rebase -i HEAD^
然后在 git-rebase 打开的编辑器中更改pick
为reword
。在此之后,您将被提示输入新的提交消息。
于 2011-12-27T16:16:51.420 回答