如何通过 Visual Studio 团队服务上的拉取请求与 Visual Studio 桌面同步分支合并

How to sync branch merging via pull request on Visual Studio Team Services with Visual Studio Desktop

我无法在 Visual Studio Team Services (VSTS) Web 界面中完成分支合并显示在 Visual Studio 2017 Desktop (VS) 中。

详情: 我在 VSTS 中创建了一个支持 Git 的测试项目,并在 VS 中克隆了它。在 VS Team Explorer 中,master 分支正确显示。在 VSTS 中,我创建了一个用户故事,然后从 master 创建了一个分支(通过用户故事对话框)。在 VS Team Explorer 中对 master 执行 sync/fetch 时,我可以在 VS 中显示新分支。我检查了 VS 中的分支,对文件进行了更改,然后提交并推送。更改在 VSTS 中正确显示。在那里,我以审阅者的身份创建了分支请求到 master 并批准了它。这合并了 VSTS 上的分支并将其删除,至少 Branches 视图不再显示分支,只有 master,并且合并历史看起来是正确的。现在我想在 VS 中进行合并,其中 master 和 branch 仍然显示在本地 repo 和 remotes/origin 下。 master 上的 checkout/sync 确实反映了已更改的文件,但该分支在 remote/origin 中仍然可见,即使它在 VSTS 中消失了!如何在此处使 VS 同步以便分支不再显示?

还是我的工作流程有误?再一次,我正在做的是

  1. 用户故事 (VSTS) ->
  2. 分支 (VSTS) ->
  3. 同步 (VS) 结帐分支 (VS) ->
  4. 更改文件 (VS) ->
  5. commit/push (VS) ->
  6. 拉取请求 (VSTS) ->
  7. 合并 (VSTS) ->
  8. ??? (VS)

VS 中的整个 "sync" 过程可能会让您感到困惑,因为它隐藏了 Git 实际执行的细节。

"Sync" 永远不会删除您的任何本地分支,因为您的本地分支上可能有更多尚未推送的更改,如果它自动执行这些操作,这些更改将被清除。

本地分支具有"tracking"远程分支的概念。您所看到的情况正在发生,因为您的本地 mybranch 仍在跟踪名为 origin/mybranch 的远程分支,即使 VSTS 上目前不存在该分支。如果您现在要对本地 mybranch 执行 push,远程跟踪分支将自动(重新)创建,并且其内容将与您本地的内容相匹配。

总而言之:您不应期望 "sync" 删除分支,因为它不是这样工作的。您需要手动删除它。

您应该直接使用 git fetch -p 命令将远程分支与 origin/branches 同步。

-p (--prune) git fetch 的选项将在获取之前删除不再存在的分支。所以你可以到本地repo的根目录执行git fetch -p,然后你会发现合并的分支不会显示在remotes/origin.


让开发人员知道是否有合并,您可以使用以下选项:

方案一:PR完成后添加通知

您可以在 VSTS 通知页面 (https://account.visualstudio.com/_notifications?view=contents) 添加订阅,指定您要通知的电子邮件地址并过滤 PR 状态更改为已完成,以便开发人员可以知道分支何时已完成合并。

注意:多个邮箱地址,可以用逗号分隔。

选项 2:手动获取更新

如果您不想为开发人员设置通知,他们应该通过以下方式查看更改:

  • 直接进入VSTS网页
  • 或使用git fetch -pgit branch -a更新他们的本地仓库,并检查是否有删除的分支。