6

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

4

3 回答 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 打开的编辑器中更改pickreword。在此之后,您将被提示输入新的提交消息。

于 2011-12-27T16:16:51.420 回答