3

我的难题是这个。我团队的一名成员修改了供应商组件。然后将该组件升级到当前版本,覆盖我团队的更改。

我的队友对有问题的部分进行了重大更改,但升级添加的更改很少。我所拥有的是:

---component version 1.0----team change A---team change B---component version 2.0
        (stock)                                              (result of upgrade)

我想要的是像这样进行合并:

          ----team change A---team change B
         /                                 \
---component version 1.0                    successful 'merge'
        (stock)                            /
         \------------component version 2.0
                       (result of upgrade)

基本原理是,如果我们可以看到供应商从 to 更改,我们的更改 from to 和合并这两组更改,那么应用团队更改component version 1.0component version 2.0component version 1.0容易team change B

据我了解,这样做的唯一方法是将分支重置为team change B,从中签出一个新分支并将和component version 1.0之间的差异应用为补丁,合并创建的分支并提交解决方案。component version 1.0component version 2.0

我希望有一种方法可以基本上模拟合并git merge --BASE='component version 1.0' --LOCAL='team change B' --REMOTE='component version 2.0',这样我就可以使用合并解析工具来确定生成的文件的样子。

4

2 回答 2

1

如果您不想重置分支(也许它已发布到共享存储库并且您不希望人们不得不处理强制更新),您可以简单地将升级恢复到版本 2.0,重新执行在 1.0 版导入的分支上升级到 2.0 版,然后合并该分支。

例如(假设您的分支已被调用master并且master当前已签出):

# create a commit that is the opposite of HEAD, effectively undoing it
git revert HEAD^
# create a new branch based on the original vendor import
git checkout -b vendor <sha1-of-vendor-1.0-commit>
# import the vendor 2.0 code
git read-tree -u --reset master^
git commit -m "vendor 2.0 code"
# merge in the new vendor code
git checkout master
git merge vendor
于 2012-11-30T03:47:44.893 回答
0

你应该可以这样做(假设master是你的分支的名称,它可能不是):

git checkout master
git reset --hard <SHA of team change B>
git checkout -b vendor-upgrade <SHA of component version 1.0>
# replace contents of working directory with component version 2.0
git add <everything that needs to be added>
git commit -m "component version 2.0"
git checkout master
git merge vendor-upgrade

根据团队变更的性质,您可能需要处理一些合并冲突,这取决于您是vendor-upgrade在完成后删除分支还是将其留在那里等待不可避免的 3.0 版本发布。 ..

于 2012-11-29T22:18:16.170 回答