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

时间:2012-05-31 11:31:03

标签: git

我目前正处于git rebase --interactive会话中,我正在编辑提交。我按照How can I split up a Git commit buried in history?的建议继续进行,即我运行git reset HEAD^并进行了修改。 现在我想要rebase继续,这需要我提交我的更改。我想修改我的旧提交消息,但问题是,如果我运行git commit --amend,我会在之前给出提交的提交消息,我实际上正在修改它 - 我当然不希望将我的更改合并到该提交中。

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

4 个答案:

答案 0 :(得分:15)

虽然CharlesB's solution is correct and probably easier,原始海报看到提交消息 之前 他想要编辑的提交的原因是因为他正在使用{{1标记--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} 指向您在HEAD@{1}之前所做的提交。您也可以直接传入该提交的sha id。

来自the git commit docs

git reset head^
     

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

当然,就像我说的那样,CharlesB的解决方案更简单,因为如果你不做第一个-C <commit> --reuse-message=<commit> ,你可以直接进行修改并修改你想要修改的提交,并自动修改在执行git reset head^时获取上一个提交消息,您不必为其传递提交sha。

答案 1 :(得分:3)

为什么要遵循提交拆分if you don't want it的说明?

您不会重置为HEAD^,这仅适用于拆分提交。只需在rebase -i中标记要进行修改的提交,即可进行更改commit --amendrebase --continue

答案 2 :(得分:1)

我有另一个答案似乎更加万无一失,但没有记录。

$ git reset HEAD^
$ git add ...               # stage the first part of your split
$ git commit -m 'part one'
$ git commit -a -F $(git rev-parse --git-dir)/rebase-merge/message

答案 3 :(得分:0)

我在git-commit(1)git-reset(1)中修改了一些示例:

$ git reset HEAD^
$ git add ...                 # stage the first part of your split
$ git commit -m 'part one'
$ git commit -a -c ORIG_HEAD  # start with the earlier commit message

如果您担心会做一些可能会改变ORIG_HEAD的事情,那么您可以这样做:

$ SAVED=$(git rev-parse HEAD)
$ git reset HEAD^
...
$ git commit -a -c $SAVED   # start with the earlier commit message