在基于git的VSTS存储库上启动pull请求时遇到2个问题。
我们有一个大师,开发和一些功能分支。我们从开发创建功能分支。我们使用pull请求将功能分支合并到develop分支中,然后偶尔我们启动从develop到master的pull请求。如果文件曾被编辑过(因此,合并为master),我们就会在master上发生冲突。看起来它跟踪每个文件,但我们只想开发覆盖主文件。
以前我们可以通过获取master来解决这些冲突,然后使用我们原始的开发文件将master合并到develop和push中。因为我们有分支策略,并且由于最近VSTS的“功能”更改,我们不允许直接在分支上进行推送。您无法切换此功能(即使您不使用其他政策)。
我使用SourceTree来完成大部分git操作。
那么我有什么办法可以让你掌握发展方向吗?为什么我总是在主分支上遇到冲突?
答案 0 :(得分:0)
对于您的第一个问题,如果不查看您的提交历史记录,很难确定冲突的确切原因。我会猜测并说这不是一个选择。我可以从个人经验中告诉您可能存在的问题,请确保您没有人将功能分支或热修复分支直接合并到master
,同时跳过您的develop
分支。当您尝试合并时,这将导致冲突。此外,确保人们不能直接提交到您的master
分支(也应该保护)。
至于您的第二个问题,您无法取消选中Protect this branch
,因为您仍然选中了Check for linked work items
。如果您先取消检查,则可以取消检查受保护的分支。
答案 1 :(得分:0)
由于您在develop
分支上设置了分支策略,因此将master
合并到develop
并推送到develop
分支不是一个好的选择(git也会阻止您这样做就像你展示的屏幕截图一样。)
使用master
覆盖develop
分支的更简单方法是通过git命令行将develop
合并到master
并使用合并策略。< / p>
详情如下:
1.单击SourceTree中的终端。
2.然后使用以下命令:
git checkout develop
git pull origin develop
git checkout master
git pull origin master
git merge develop -X theirs
git push origin master
现在您的master
分支被develop
分支覆盖。
为什么我总是在主分支上遇到冲突?
当您尝试将develop
合并到master
时,如果存在冲突,则表示您在develop
和master
分支上修改了相同的文件。因此git将显示冲突文件(具有相同的文件名但内容不同)。如果-X theirs
命令为git merge develop
选项,它将通过保留develop
分支的版本来自动解决冲突。
答案 2 :(得分:0)