当VSTS中的策略时,Git在master上发生冲突

时间:2017-08-04 15:18:34

标签: git version-control merge azure-pipelines

在基于git的VSTS存储库上启动pull请求时遇到2个问题。

  1. 我们有一个大师,开发和一些功能分支。我们从开发创建功能分支。我们使用pull请求将功能分支合并到develop分支中,然后偶尔我们启动从develop到master的pull请求。如果文件曾被编辑过(因此,合并为master),我们就会在master上发生冲突。看起来它跟踪每个文件,但我们只想开发覆盖主文件。

  2. 以前我们可以通过获取master来解决这些冲突,然后使用我们原始的开发文件将master合并到develop和push中。因为我们有分支策略,并且由于最近VSTS的“功能”更改,我们不允许直接在分支上进行推送。您无法切换此功能(即使您不使用其他政策)。

  3. cannot directly push into develop by policy

    cannot push to develop branch

    我使用SourceTree来完成大部分git操作。

    那么我有什么办法可以让你掌握发展方向吗?为什么我总是在主分支上遇到冲突?

3 个答案:

答案 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中的终端。

enter image description here

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时,如果存在冲突,则表示您在developmaster分支上修改了相同的文件。因此git将显示冲突文件(具有相同的文件名但内容不同)。如果-X theirs命令为git merge develop选项,它将通过保留develop分支的版本来自动解决冲突。

答案 2 :(得分:0)

第一个问题仍然存在,但这就是它目前在VSTS上的工作方式。

第二个问题已经解决,因此我们不再需要解决第一个问题,因为我们不再在master上遇到任何冲突了。 如前所述,从来没有直接登记主人,但我们在所有分支机构进行了压缩合并。所以从一个功能分支开发,也从开发到掌握。

为了避免冲突,我们使用以下政策:

  • 我们强制从功能分支进行壁球合并以开发分支

enter image description here

  • 我们强制从开发到主分支的快速合并

enter image description here