我遇到了我不了解的与git和Bitbucket有关的情况。
我创建了一个分支branchB
,该分支起源于master
。我进行了一些提交,并向master
创建了请求请求。在审核请求请求的同时,我开始研究另一个功能,该功能是branchB
的功能的扩展。因此,我创建了另一个源自branchC
的分支(branchB
)。准备好扩展功能后,我向branchB
创建了一个拉取请求。请参见图片I 。当时我没有任何合并冲突。
我希望允许审阅者分别查看两个请求,并分别进行较小的更改。
我的计划如下:
PR1
选项合并拉取请求1(--squash
)进行掌握PR2
)中的目标分支更改为master(请参见图片2 )PR2
)合并到主域但是,当我使用PR1
选项将拉取请求1(--squash
)合并为master时,Bitbucket会自动将拉取请求2(PR2
)的目标分支更改为{ {1}},在拉取请求2(master
)中发生了一些冲突。
所以我解决了冲突:
PR2
git checkout master
git pull
git checkout branchC
git rebase master
我在这里解决了所有冲突。
git mergetool
实际上,我遇到过两次描述的问题,因为我也有git rebase --continue
源自branchD
。当我将branchC
合并到branchB
中时,我必须在步骤6中解决一些冲突。但是,当我将master
合并到branchC
中时,我不必解决在步骤6中手动进行任何冲突(即使Bitbucket向我显示了合并冲突,因此我也必须重新设置master
的基准)。
Mu问题如下:
branchC
选项将PR2
合并为master时,Bitbucket为什么会显示PR1
的任何合并冲突?我希望它能解决这个问题图片--squash
和I
之间的更改仅在提交ID中进行-代码未更改。 Git / Butbucket应该能够弄清楚我要进行哪些更改。II
合并到branchD
(在将master
合并到branch C
之后,为什么没有得到应该手动解决的冲突) ?因为Bitbucket无法合并我的请求请求,所以我希望我需要手动解决一些冲突。它可以与我的台式机和Bitbucket上的git版本相关吗?其他信息:
master
2.17.1.windows.2
v5.12.2
对于这种现象的任何解释,我将不胜感激。
编辑:
1.我使用2.14.5
选项合并了所有拉取请求。
2.我更新了图片,以显示--squash
和branchB
分别不是以提交branchC
和B1
开始。
答案 0 :(得分:1)
如果我正确理解您的情况。问题是这个--squash
。这是说明如何在GIT How does git know which version of a line to keep?中进行合并的主题。
当您与--squash
合并时,由于git commit实际上是不可变的,因此您创建了一个具有新ID的新压缩提交。当您想将PR2
合并回主文件时,两个位置的文件内容均已更改。对于branchB
,有许多带有某些ID的提交,对于master
,只有一个具有不同ID的提交,并且两个分支上的某些文件均已更改,因此git根本不知道哪个版本是正确。这就是为什么在branchC
时没有冲突的原因,因为branchB
和branchC
的提交历史是相同的(此处没有--squash
)。