Git:主要版本更改的分段合并方法?

Git:主要版本更改的分段合并方法?,git,merge,Git,Merge,我们正在对我们的网站进行重大修改。修改后的站点上的所有工作都是在git分支(称为2.0)中完成的,该分支不久前从master分支出来。在此过程中,对master进行了一些小的和重要的更改,我们希望将这些更改合并到2.0中 然而,将其作为一个大型合并似乎很难实现——虽然有些更改可以很好地合并,但有些更改涉及到2.0上不再存在的代码,并且基本上需要在2.0上重新实现新功能。只要合并后存在大量未解决的冲突,修复这些功能就可能相当困难。我们已经考虑过使用cherry pick只从master带来那些可以

我们正在对我们的网站进行重大修改。修改后的站点上的所有工作都是在git分支(称为2.0)中完成的,该分支不久前从master分支出来。在此过程中,对master进行了一些小的和重要的更改,我们希望将这些更改合并到2.0中

然而,将其作为一个大型合并似乎很难实现——虽然有些更改可以很好地合并,但有些更改涉及到2.0上不再存在的代码,并且基本上需要在2.0上重新实现新功能。只要合并后存在大量未解决的冲突,修复这些功能就可能相当困难。我们已经考虑过使用cherry pick只从master带来那些可以很好地合并的更改,同时手动重新实现主要更改,但我担心如果我们想要将2.0中的所有更改合并回master,这会带来麻烦


理想情况下,我可以从master到2.0进行分段合并——将一组次要提交合并到一个特定提交,然后合并一个主要提交并手动重新实现一个特定的新功能,然后是另一个系列,最终,master完全合并到2.0中。这是解决这种情况的好方法吗?如果是这样,我如何将部分合并到master中,而不是一直合并到最近的master提交?或者我应该采取其他更好的方法吗?

您当然可以通过引用提交散列而不是分支名称来合并分支。因此,假设您想在
主行
上合并到一个特定的提交–假设它是
abcd1234
–您只需进入
2.0
分支并运行:

git merge abcd1234
使用这种方法,您可以一次执行任意数量的提交。如果你遇到冲突,你可以解决一个冲突,而不必一次承担全部责任

如果您知道
master
分支上的更改仅与分支上不存在的代码相关,因此完全过时,则可以运行:

git merge --strategy=ours bcde2345
这将为
master
上的更改创建一个合并提交,但不会从
2.0
上更改树的内容,因此提交将标记为合并,而不实际执行任何操作