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

How can I git rebase to merge two commits, one is farther and one is recent

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

$ 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之前的commit比较多,不过我觉得跑题了,就不一一列举了。

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

你能告诉我在这里应该做什么吗?我有空push -f到远程分支

使用 rebase -i HEAD~12,您将按照 A(顶部)到 L(底部)的顺序获得提交。只需重新排序它们,以便 K 在 A 之后,而不是 pick 选择 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