我有一个git resposition,看起来有点像这样:

C0 ---- C1 ---- ... ---- C12 ---- C14 (dev)
                          \
                           \---- C13 (abandoned)

“dev”是主要的开发分支,“discouped”是一个实验,我们可能希望在将来的某个时候重新审视它。
我想压扁。C1进入一次提交,得到如下结果:
C0 ---- C1' ---- C14' (dev)
         \
          \---- C13' (abandoned)

我可以在dev上使用交互式rebase
C0 ---- C1' ---- C14' (dev)

然后查看C12和cherry pickC1'asC13。但是,有没有更简单的方法可以做到这一点,也可以扩展到处理更多分支和不同提交(但一些共享历史将被压缩)的更复杂的图表,而无需大量手动工作?

最佳答案

你在正确的轨道上。首先,忽略C13并用一个交互式的rebase压缩到C0 - C1' - C14'。但不要随意挑选,而是将C13重设为C1'git应该检测到这基本上是一个禁止操作的操作,您将完成。所以:

git rebase --onto C1_new C12 C13

10-06 05:56