是否可以从先前的分支合并并解决与当前分支的冲突?
我有一个场景,其中一位同事无法访问我们的远程存储库,因此不得不对项目副本中的文件进行更改。我现在希望将这些文件合并到一个新的分支中回到项目中;但是,这些文件也有其他工作。
我考虑过从最新的主人那里分出来,用同事的工作来破坏新分支中的旧文件,然后从前一个分支的负责人重新出现。理想情况下,我能够通过手动确认冲突。这将有一个类似的结构:
o-------o-------o-------o
/ / \
/ / \
--------o---------------+-------------o----->
在我想要从这里合并到新分支的+处原始分支没有变化。
当我从原始分支尝试合并时,我得到"所有文件都是最新的"。
编辑: 编辑的实际结构与上图略有不同,它更接近:
------A-----B--------+----> dev branch
| \ \
| B'---C`--D--> new branch with changes
|
A`----C changes made outside Git
其中A`是A项目的副本,B是我在Git中做出的改变,C是我的同事在Git之外做出的改变,而C`是分支的状态,一旦我'已经复制了他的更改.D是从我希望选择冲突的原始分支返回的合并。
但是,我没有改变,而是D,而不是D。我相信这可能是因为复制时分支的状态是B,因此Git只是将新文件视为一组简单的添加和删除,没有什么难以自动解决。
答案 0 :(得分:2)
以下是要遵循的程序:
以下是所有步骤的代码:
git pull origin master
git checkout -b friend_changes
将更改从其他文件夹复制到此
git add -A; git commit -m "Firend changes"
git rebase -i master
解决冲突(如果有)
git add . ; git rebase --continue
现在您已完成所有更改
git push origin friend_changes
答案 1 :(得分:0)
我找到了解决我的潜在问题的方法,不一定是我想要的实际机制,但它是一个解决方案。
问题在于,当我为外部更改创建分支时,我已经创建了一些代码。 Git将新代码的更改顺序视为A---B---C
,其中实际为A----C
。但是合并时的更改顺序看起来像A---B---C---B
(而不是A---C---B
应该触发冲突解决),因此Git非常乐意将BCB解析为BC。
但实际上我并没有从原始开发分支的负责人那里分支出来。相反,在我将副本发送给他之前,我从最后一次提交到开发分支创建了新分支,并将他的更改复制到此分支中,之后从开发分支合并将正确地进行更改。
-----A---B-----+--->
:\ \
: A`---C`---D-->
:
A`---C
事实上,我甚至不需要解决冲突,Git自动想出了一个。