3

假设我的回购中有以下历史记录:

git log --oneline    
<3rd sha1> Third commit.
<2nd sha1> Second commit.
<1st sha1> First commit.

我如何将第三个提交压缩到第一个,而第二个不受影响?

4

1 回答 1

10

我已经这样做了:

  1. 清理了我当前的更改(隐藏)。
  2. git rebase -i HEAD~3.
  3. 编辑为:

    选择 <2nd sha1> 第二次提交。

    选择 <1st sha1> 第一次提交。

    squash <3rd sha1> 第三次提交。

  4. 解决了冲突:error: could not apply <2nd sha1>... Second commit..

  5. git rebase --continue.
  6. 文本编辑器被第二条提交消息触发,我保留了它。
  7. 解决了冲突:error: could not apply <1nd sha1>... First commit..
  8. git rebase --continue.
  9. 文本编辑器被第一个提交消息触发,我保留了它。
  10. 文本编辑器被触发,要求提供用于压缩第一次和第三次提交的提交消息,我输入了一条新消息 ( First commit (squashed).)。

然后就完成了。

git log --oneline

git log --oneline    
<2nd sha1> Second commit.
<1st sha1> First commit (squashed).

我成功地做到了,发生的冲突应该发生并且很容易解决。

我对结果非常满意,但无论如何我想知道是否有更好的方法来实现这一目标。

于 2013-03-19T15:04:53.280 回答