我如何git rebase合并两个提交,一个是更远,一个是最近

时间:2015-01-26 04:48:43

标签: git merge rebase

我想合并两个提交。一个是更远的,另一个是我的git历史中最近的一个。这是我在分支中的最后12次提交(不是在主人中)。

$ git log -12 --pretty=oneline
47c724a6fdbb6a0b6d51cd42d0bde92c23a0d32e L 
9446932bc6e13d0437ab6b3f03161e3c2bca0f62 K Follow up of A
842e6a97284a02a70122d50f2f647a51b0e5cce7 J
77a0e99a62d9f77044cc37cbe22870b11c83f046 I
a125f0f701732a2dbd0cfe85c65583c46d1c67fa H
544b241dfe56e3b548af04c4d7c6e2092f3e108d G
7e5a649681a97f23c11716e8c87dfb1cc7d6125d F
d5378ec4216dce45dc0fc4a4ea1c0e4dac41a329 E
8d0420fd97178908db966a03d58252d5fb2b1c82 D
0e4425a86ce522a1a25886587c57379c1b4522ff C
5cba291aba6bb10749e1f1d4e0970d7e42decc17 B
2ba31cd61724f14f84a1a0a3e26e788374c62f9d A

在A之前有很多提交,但我认为它们在这里是偏离主题的,我没有列出它们。

我想合并A和K.如果可能,我想在合并后删除A或K或两者。我在这里找到了一些关于git rebase --interactive的问题。我试过git rebase -i HEAD~12,我被带进了VIM。然后,我被困住了,我无法继续。

  • 我在K上尝试了edit,但似乎只编辑了提交消息。
  • 我在A和K上尝试了squash,但我得到了Cannot 'squash' without a previous commit。它似乎只压缩了两个后续提交。

你能告诉我应该在这做什么吗?我可以push -f到远程分支。

1 个答案:

答案 0 :(得分:1)

使用rebase -i HEAD~12,您将按顺序A(在顶部)到L(在底部)进行提交。只需重新排序它们,以便K跟随A而不是选择选择 fixup 并保存该缓冲区并退出vi。

pick 2ba31cd61724f14f84a1a0a3e26e788374c62f9d A
fixup 9446932bc6e13d0437ab6b3f03161e3c2bca0f62 K Follow up of A
pick 5cba291aba6bb10749e1f1d4e0970d7e42decc17 B
pick 0e4425a86ce522a1a25886587c57379c1b4522ff C
pick 8d0420fd97178908db966a03d58252d5fb2b1c82 D
pick d5378ec4216dce45dc0fc4a4ea1c0e4dac41a329 E
pick 7e5a649681a97f23c11716e8c87dfb1cc7d6125d F
pick 544b241dfe56e3b548af04c4d7c6e2092f3e108d G
pick a125f0f701732a2dbd0cfe85c65583c46d1c67fa H
pick 77a0e99a62d9f77044cc37cbe22870b11c83f046 I
pick 842e6a97284a02a70122d50f2f647a51b0e5cce7 J
pick 47c724a6fdbb6a0b6d51cd42d0bde92c23a0d32e L