15

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

那么如何为我现在正在处理的提交检索我的旧提交消息?

4

4 回答 4

22

虽然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}

HEAD@{1}指向你之前的提交git reset head^。您也可以直接为该提交传递 sha id。

文档_git commit

-C <commit>
--reuse-message=<commit>

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

当然,就像我说的,CharlesB 的解决方案更简单,因为如果你不做第一个git reset head^,你可以直接进行更改并修改你试图修改的提交,当你这样做时你会自动得到上一个提交消息git commit --amend,您不必为此传递提交 sha。

于 2013-07-14T20:25:35.770 回答
4

如果您不想要它,为什么要遵循有关提交拆分的说明?

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

于 2012-05-31T12:16:36.403 回答
1

我在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
于 2013-07-12T20:14:12.207 回答
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
于 2013-07-12T20:35:43.883 回答