Git:如何合并多年来分歧很大的复杂分支
我目前已经将一个巨大的项目从SVN导入Git。 我决定把所有的树枝都展平,只保留两根。 主分支和分叉分支Git:如何合并多年来分歧很大的复杂分支,git,svn,branch,git-merge,git-rebase,Git,Svn,Branch,Git Merge,Git Rebase,我目前已经将一个巨大的项目从SVN导入Git。 我决定把所有的树枝都展平,只保留两根。 主分支和分叉分支 Master: A-B-C-D \ X-Y: Bugfix Diverged: E-F-G-H 发散的代码包含许多不同的源代码,但有些部分仍然源于master。当我们必须进行一些错误修复时,我们必须手动修补Master并在SVN上进行发散。我想将错误修复合并到master中(这里没有问题),并将错误修复合并到diversed中 请记住,我不希望以前的提交被插
Master: A-B-C-D
\ X-Y: Bugfix
Diverged: E-F-G-H
发散的代码包含许多不同的源代码,但有些部分仍然源于master。当我们必须进行一些错误修复时,我们必须手动修补Master并在SVN上进行发散。我想将错误修复合并到master中(这里没有问题),并将错误修复合并到diversed中
请记住,我不希望以前的提交被插入到发散的主文件中。所以ABCD应该被忽略。
我要找的结构是:
Master: A-B-C-D-X-Y
Diverged: E-F-G-H-X-Y
有人能帮我弄清楚吗?合并分叉的分支总是很痛苦的 首先,您必须记住一些有用的
git
命令,这些命令将帮助您进行怪物合并
git log HEAD..origin/master
-将显示分支之间的差异
如果simplegit merge origin/master
不起作用,请尝试将合并拆分为一系列较小的任务。我建议在当前主节点上重定分支的位置,以便将更改本地化:
git-rebase-remotes/origin/master
您将以解决每一个冲突(可能在许多提交中)的枯燥任务结束,但是这些小任务比同时处理整个合并要简单得多
Master: A-B-C-D-X-Y
Diverged: E-F-G-H-X-Y
git checkout diverged
git rebase master
重定基址完成后,您可以将主节点快进到分支尖端:
Master: A-B-C-D-X-Y
\ E-F-G-H
空提交将被忽略。
在最复杂的场景中,您可以在分支上使用交互式重基来重新安排提交。即,对于您的计划:
虽然这是体力劳动,但它仍然是一种分而治之的策略
阅读这篇文章,了解一些深入的想法:您的示例可以通过以下方法轻松解决(除了合并冲突) 它复制提交,并将其应用于另一个分支
git checkout diverged
git cherry-pick X Y
这恰好创建了您在示例中描述的情况,但实际上并没有合并任何内容