2014-10-12 29 views
0

我知道git merge-base获得两个分支的最佳共同父项。但是,如何获得一个补丁集合,这个补丁集合给了我一个补丁来应用于其中一个分支,以便让它到达另一个分支所在的位置?在两个分支之间找到补丁的脚本

Git开发是非线性的,这意味着您可以找到许多这些补丁集。我瞄准一个。

此补丁集的基础案例是其中没有发生合并的whitin新分支,从分支HEAD到共同祖先的路径可作为补丁集(也是唯一的一个)。

感应壳体当合并在祖先和分支HEAD之间此路径被发现是:

  1. 所有头之间的路径提交和包括在子合并。
  2. 子合并提交包含
  3. 找到最接近的子祖先,它是祖先的子代。
  4. 这个子合并和这个子祖先之间的所有提交都被忽略。
  5. 在这个子祖先和祖先之间设置的最短补丁与这个集合在一起。
  6. 如果在步骤3中未找到子祖先,则包括作为祖先子节点的分支的所有提交(合并与不包含祖先的分支合并)。

这是一个复杂的操作git已经做到了。试图将它重现到这个补丁集是很困难的。脚本如何实现这一目标?

回答

1

你的问题对我来说很难分析,但听起来很像你只是问git rebase如何工作?它生成的格式补丁是这样的

git format-patch -k --stdout --full-index --cherry-pick --right-only --src-prefix=a/ --dst-prefix=b/ --no-renames --no-cover-letter BRANCH1...BRANCH2 
+0

你说得对。我的问题很难理解。我相信我甚至在解释算法时犯了错误。你回答什么? – 2014-10-12 17:38:28

+0

这就是'git rebase'调用来获取要应用的补丁列表,这就是你听起来像是在 – 2014-10-14 19:01:53