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