![](/img/trans.png)
[英]Git merge: why do I get a lot of merge conflicts after modifying the source on both linux and windows?
[英]Why do I get git merge conflicts?
我遇到了与 git 和 Bitbucket 相关的情况,我不明白。
我创建了一个源自master
的分支branchB
。 我做了一些提交并创建了一个对master
的拉取请求。 在审查这个拉取请求的同时,我开始研究另一个特性,它是branchB
特性的扩展。 所以我创建了另一个源自branchB
分支( branchC
)。 当我的扩展功能准备就绪时,我创建了一个对branchB
的拉取请求。 见图片I。 我当时没有任何合并冲突。
我想让审阅者分别查看两个拉取请求,并拥有具有较小更改的单独拉取请求。
我的计划如下:
--squash
选项将拉取请求 1 ( PR1
) 合并到 masterPR2
) 中的目标分支更改为 master (见图2 )PR2
) 合并到 master 但是,当我使用--squash
选项将拉取请求 1 ( PR1
) 合并到 master 时,Bitbucket 自动将拉取请求 2 ( PR2
) 的目标分支更改为master
并且我在拉取请求 2 ( PR2
) 中遇到了一些冲突.
所以我解决了冲突:
git checkout master
git pull
git checkout branchC
git rebase master
git mergetool
我在这里解决了所有冲突。
git rebase --continue
实际上,所描述的问题发生在我身上两次,因为我也有过branchD
源自branchC
。 当我将branchB
合并到master
,我必须在步骤 6 中解决一些冲突。 但是,当我将branchC
合并到master
,我不必在步骤 6 中手动解决任何冲突(即使 Bitbucket 显示了合并冲突,所以我不得不重新设置branchC
)。
穆问题如下:
--squash
选项将PR1
合并到 master 时,Bitbucket 会向我显示PR2
任何合并冲突? 我希望它弄清楚图片I
和II
之间的变化仅在提交 ID 中 - 代码没有改变。 Git/Butbucket 应该能够弄清楚我想要进行哪些更改。branchD
重新branchD
到master
(在将branch C
合并到master
)没有任何应该手动解决的冲突? 由于 Bitbucket 无法合并我的拉取请求,我希望我需要手动解决一些冲突。 它是否与我的桌面和 Bitbucket 上的 git 版本有关?附加信息:
2.17.1.windows.2
v5.12.2
版本: v5.12.2
2.14.5
我很感激对这种现象的任何解释。
编辑: 1. 我使用--squash
选项合并了所有拉取请求。 2. 我更新了图片以显示branchB
和branchC
不分别以提交B1
和C1
开头。
如果我理解你的情况正确。 问题是这个--squash
。 这是解释如何在 GIT 中完成合并的主题git 如何知道要保留哪个版本的行? .
当您与--squash
合并时,由于 git 提交实际上是不可变的,因此您创建了一个具有新 ID 的新压缩提交。 当您想将PR2
合并回母版时,两个地方的文件内容都已更改。 对于branchB
有一些带有一些 ID 的提交,而对于master
只有一个具有不同 ID 的提交,并且两个分支上的一些文件都被更改了,所以基本上 git 不知道哪个版本是正确的。 这就是为什么在branchC
情况下没有冲突的branchC
,因为branchB
和branchC
的提交历史是相同的(这里没有执行--squash
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.