如何解决 VSTS 中拉取请求中的合并冲突?
How to resolve merge conflict in pull request in VSTS?
我创建了拉取请求我进入了这个:
"Approve" 按钮什么都不做,完全被禁用。
如何解决拉取请求中的此冲突?
更新
Microsoft 刚刚添加了基于浏览器的合并。这可能会让你摆脱小冲突的困境。
并提供 improved visualizations of the different scenarios as of Sprint 150。
对于更复杂的情况:
你有两个选项来解决冲突,反向集成来自目标分支的更改(这会创建额外的合并提交),或者在目标分支上变基(这会让你的历史变得干净整洁)。
在完成 PR 之前从目标合并到当前分支。
您需要在本地克隆存储库,执行从目标分支到您的分支的合并,并将这些更改推送到存储库。 VSTS 将检测更改并更新拉取请求。
-------o3 PR
/
---------o1-o2 target
因此合并target (o2)
到PR
:
-------o3-o4 PR
/ /
---------o1----------o2 target
然后完成PR
-------o3-o4 PR
/ / \
---------o1----------o2--o5 target
Rebase PR 分支以包含 target 上的最新更改
或者,您可以在本地克隆 repo,在目标分支的最新版本上 rebase PR 分支,解决 rebase 中的所有问题,然后将更改强制推送回 PR 分支。 VSTS 将检测更改并更新拉取请求。
-------o3 PR
/
---------o1-o2 target
因此将 o3
变基到 o2
:
-------o3 PR
/
---------o1-o2 target
然后完成PR
(在下面的情况下使用快进合并):
---------o1-o2-o3 target
您可以通过@jessiehouwing 或使用新插件来完成上述技术。 MicrosoftDevLabs 发布了 link 到插件以解决冲突。下面给出了插件的 link
https://marketplace.visualstudio.com/items?itemName=ms-devlabs.conflicts-tab
- 使用 Visual Studio 打开您的项目。
- 打开查看 > 团队资源管理器
- 更改为 分支机构 选项卡。
- 双击您要合并的分支(例如 dev)。
- 右键单击 > 合并自 > Select
从分支合并:master,
进入当前分支:dev
- 单击合并按钮
- 选择冲突文件
- 然后解决冲突。您可以单击左侧或右侧的复选框
对于您要包括的部分。
- 然后提交合并
- 完成。
回答@metabuddy 的问题:
And then what? This only shows how to resolve conflicts locally, I can't push the target nor source branch directly to VSTS because I have branch policies which require pull requests to be made from feature branches.
您可以按照上述步骤操作。只是源分支和目标分支会略有不同。
- 分支合并自:master
- 分支到:你的特征分支
- 创建合并请求以从 your-feature-branch 合并到 master
此回答参考了@metabuddy 对@sky91
回答的评论
如果您的目标分支在 'master' 和 'master' 分支上应用了不接受直接合并的策略怎么办?
注意:考虑'master'是目标分支,'x001'是pull request中的源分支,'master'和'x001'分支有冲突。
在这种情况下,@sky91 的解决方案将不起作用。为此,您需要按照以下步骤操作。
- 从目标 ('master') 分支创建一个新分支,如 'x002'
- 转到 visual studio,然后 select 'x002'
- 从 'x001' 分支合并 'x002'。
- 转到您的拉取请求并将目标分支更改为 'x002'
- 它将显示与拉取请求中相同的冲突。
- 解决所有冲突并提交合并。
- 刷新拉取请求页面时,会显示'changes already merge'
- 它必须显示 'Close' 按钮。如果存在,则关闭此拉取请求。
- 现在您的所有更改都已合并并保存到 'x002'
- 创建一个新的拉取请求,从 'x002' 到 'master'
- 因为所有的冲突都消失了,所以它允许合并到 'master' 分支。
我创建了拉取请求我进入了这个:
"Approve" 按钮什么都不做,完全被禁用。
如何解决拉取请求中的此冲突?
更新
Microsoft 刚刚添加了基于浏览器的合并。这可能会让你摆脱小冲突的困境。
并提供 improved visualizations of the different scenarios as of Sprint 150。
对于更复杂的情况:
你有两个选项来解决冲突,反向集成来自目标分支的更改(这会创建额外的合并提交),或者在目标分支上变基(这会让你的历史变得干净整洁)。
在完成 PR 之前从目标合并到当前分支。
您需要在本地克隆存储库,执行从目标分支到您的分支的合并,并将这些更改推送到存储库。 VSTS 将检测更改并更新拉取请求。
-------o3 PR
/
---------o1-o2 target
因此合并target (o2)
到PR
:
-------o3-o4 PR
/ /
---------o1----------o2 target
然后完成PR
-------o3-o4 PR
/ / \
---------o1----------o2--o5 target
Rebase PR 分支以包含 target 上的最新更改
或者,您可以在本地克隆 repo,在目标分支的最新版本上 rebase PR 分支,解决 rebase 中的所有问题,然后将更改强制推送回 PR 分支。 VSTS 将检测更改并更新拉取请求。
-------o3 PR
/
---------o1-o2 target
因此将 o3
变基到 o2
:
-------o3 PR
/
---------o1-o2 target
然后完成PR
(在下面的情况下使用快进合并):
---------o1-o2-o3 target
您可以通过@jessiehouwing 或使用新插件来完成上述技术。 MicrosoftDevLabs 发布了 link 到插件以解决冲突。下面给出了插件的 link https://marketplace.visualstudio.com/items?itemName=ms-devlabs.conflicts-tab
- 使用 Visual Studio 打开您的项目。
- 打开查看 > 团队资源管理器
- 更改为 分支机构 选项卡。
- 双击您要合并的分支(例如 dev)。
- 右键单击 > 合并自 > Select
从分支合并:master,
进入当前分支:dev - 单击合并按钮
- 选择冲突文件
- 然后解决冲突。您可以单击左侧或右侧的复选框 对于您要包括的部分。
- 然后提交合并
- 完成。
回答@metabuddy 的问题:
And then what? This only shows how to resolve conflicts locally, I can't push the target nor source branch directly to VSTS because I have branch policies which require pull requests to be made from feature branches.
您可以按照上述步骤操作。只是源分支和目标分支会略有不同。
- 分支合并自:master
- 分支到:你的特征分支
- 创建合并请求以从 your-feature-branch 合并到 master
此回答参考了@metabuddy 对@sky91
回答的评论如果您的目标分支在 'master' 和 'master' 分支上应用了不接受直接合并的策略怎么办?
注意:考虑'master'是目标分支,'x001'是pull request中的源分支,'master'和'x001'分支有冲突。
在这种情况下,@sky91 的解决方案将不起作用。为此,您需要按照以下步骤操作。
- 从目标 ('master') 分支创建一个新分支,如 'x002'
- 转到 visual studio,然后 select 'x002'
- 从 'x001' 分支合并 'x002'。
- 转到您的拉取请求并将目标分支更改为 'x002'
- 它将显示与拉取请求中相同的冲突。
- 解决所有冲突并提交合并。
- 刷新拉取请求页面时,会显示'changes already merge'
- 它必须显示 'Close' 按钮。如果存在,则关闭此拉取请求。
- 现在您的所有更改都已合并并保存到 'x002'
- 创建一个新的拉取请求,从 'x002' 到 'master'
- 因为所有的冲突都消失了,所以它允许合并到 'master' 分支。