Git: 挤压分支间共享的材质

Git: squashing material shared between branches

我有一个 git 存储库,看起来有点像这样:

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

'dev' 是主要的开发分支,'abandoned' 是一个我们可能希望在未来某个时候重新访问的实验。 我想将 C1...C12 压缩成一个提交,得到这样的东西:

C0 ---- C1' ---- C14' (dev)
         \
          \---- C13' (abandoned)

我可以在 dev 上使用交互式变基来获得

C0 ---- C1' ---- C14' (dev)

然后查看 C1' 并挑选 C13 作为 C13'。但是有没有更简单的方法来做到这一点,它也可以扩展到处理具有更多分支和不同提交的更复杂的图表(但一些共享的历史被压缩)而不需要大量的手动工作?

你走在正确的轨道上。首先,忽略 C13 并通过交互式变基压缩到 C0 - C1' - C14'。但是不要挑剔,而是将 C13 变基为 C1'git 应该检测到这基本上是一个空操作,您将完成。所以:

git rebase --onto C1_new C12 C13