如何通过git rebase --interactive编辑提交时保留提交消息?

Ber*_*ter 13 git

我目前正处于 git rebase --interactive会话中,我正在编辑提交.我正在按照建议如何拆分历史上埋藏的Git提交?即我跑了git reset HEAD^并做了我的修改.现在我想要rebase继续,这需要我提交我的更改.我想修改我的旧提交消息,但问题是,如果我运行git commit --amend,我会我实际修改之前给出提交的提交消息- 我当然不想合并我的更改为该提交.

那么如何为我正在进行的提交检索旧的提交消息呢?

小智 16

虽然CharlesB的解决方案是正确的并且可能更容易,但是原始海报他想要编辑的提交之前看到提交消息的原因是因为他正在使用--amend标志git commit,这会修改先前的提交.

而不是使用--amend提交更改,只需使用git commit没有标志,不会触及先前的提交.您还可以传入一个选项,以重用您重置的提交使用的提交消息git reset head^:

git commit --reuse-message=HEAD@{1}

# Or use -C, which is the same thing, but shorter:
git commit -C HEAD@{1}
Run Code Online (Sandbox Code Playgroud)

HEAD@{1}指向你之前的承诺git reset head^.您也可以直接传入该提交的sha id.

git commit文档:

-C <commit>
--reuse-message=<commit>
Run Code Online (Sandbox Code Playgroud)

获取现有提交对象,并在创建提交时重用日志消息和作者信息(包括时间戳).

当然,就像我说的那样,CharlesB的解决方案更简单,因为如果你不做第一个git reset head^,你可以只做更改并修改你想要直接修改的提交,并且当你做时你会自动获得之前的提交消息git commit --amend,你不必为它传递提交sha.

  • 一个小写的"头"实际上在这里工作吗?我不得不使用完全大写的版本. (2认同)

Cha*_*esB 5

如果您不希望这样做,为什么要遵循有关提交拆分的说明呢?

您不会重置为HEAD^,这只适用于拆分提交时。只需在 中标记要编辑的提交rebase -i,进行更改,commit --amend然后rebase --continue