问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Azure DevOps中Git合并冲突的解决方案

创作时间:
作者:
@小白创作中心

Azure DevOps中Git合并冲突的解决方案

引用
1
来源
1.
https://learn.microsoft.com/zh-cn/azure/devops/repos/git/merging?view=azure-devops&viewFallbackFrom=tfs-2013&tabs=visual-studio-2022

在使用Git进行版本控制时,合并冲突是一个常见的问题。本文将详细介绍如何在Azure DevOps中解决Git合并冲突,包括在Visual Studio中的具体操作方法。

了解合并冲突

Git合并或变基将源分支中的提交集成到当前本地分支(目标分支)中。Git合并执行一个快进或非快进合并。非快进合并也称为三向合并或true合并。Git变基是另一种合并类型。下图显示了这些合并类型。

对于Git合并,如果目标分支的尖端存在于源分支中,则默认合并类型将为快进合并。否则,默认合并类型将为非快进合并。

  • 快进合并:永远不会有合并冲突,因为如果目标分支的尖端已经从源分支偏离,Git就不会应用快进合并。默认情况下,Git尽可能使用快进合并。例如,Git将对本地分支(你仅通过从它的远程对应分支拉取来更新它)应用快进合并。

  • 非快进合并:会生成一个新的目标分支“合并提交”,将源分支更改与目标分支更改集成。适用的更改是在最后一次提交(对两个分支通用)之后进行的更改。在上图中,提交C是两个分支中的最后一个通用提交。如果任何源分支更改与任何目标分支更改冲突,则Git将提示你解决合并冲突。合并提交(L)包含集成的源分支和目标分支更改。源分支尖端和目标分支尖端(K和E)是合并提交的父级。在分支的提交历史记录中,合并提交是有用的合并操作标记,并清楚地显示合并的分支。

  • Git变基:对目标分支的提交历史记录进行重新排序,使其包含所有源分支提交,后跟自上次通用提交以来的所有目标分支提交。在上图中,提交C是两个分支中的最后一个通用提交。另一种查看方法是,变基在源分支历史记录的基础上重播目标分支中的更改。如果任何源分支更改与任何目标分支更改冲突,则Git将提示你解决合并冲突。与快进合并一样,变基不会创建合并提交。值得注意的是,变基会更改现有目标分支提交的顺序,而其他合并策略的情况并非如此。在上图中,提交K'包含与K相同的更改,但具有新的提交ID,因为它链接回提交E而不是C。

Git合并和变基仅修改目标分支,源分支保持不变。遇到一个或多个合并冲突时,必须解决这些冲突才能完成合并或变基。或者,可以取消合并/变基操作,并将目标分支返回到其以前的状态。

何时解决合并冲突

Git合并和Git变基广泛用于Git工作流中。处理本地功能或bug修复分支时,常见做法是:

  1. 通过定期拉取以提取和合并远程提交,使本地main分支与其远程对应分支保持同步。
  2. 使用重基或合并,将本地main分支更新集成到本地功能分支。
  3. 通过将本地功能分支推送到相应的远程分支来备份你在本地功能分支上的工作。
  4. 功能完成后,创建拉取请求以将远程功能分支合并到远程main分支中。

通过经常将远程更改集成到本地存储库中,可以随时了解其他人最近的工作,并及时解决出现的任何合并冲突。

解决合并冲突

解决合并冲突的过程适用于Git合并和Git变基。虽然以下步骤介绍了如何在合并期间解决合并冲突,但你也可以类似地在变基过程中解决合并冲突。

使用Visual Studio 2022解决合并冲突

  1. 在“Git存储库”窗口的“分支”窗格中,签出目标分支。然后,右键单击源分支,并选择“将合并到”。

  2. 如果Git因冲突而停止了合并,Visual Studio将通知你。在这种情况下,可以解决冲突,也可以取消合并,返回到合并前状态。“Git更改”窗口的“未合并的更改”部分列出了存在合并冲突的文件。对于内容中存在合并冲突的文件,双击该文件以在合并编辑器中将其打开。

  3. 在合并编辑器中,“传入”窗格显示源分支文件版本,“当前”窗格显示目标分支文件版本,“结果”窗格显示生成的合并文件。要应用特定的源或目标分支更改,请选中要保留的冲突行旁边的复选框。还可以直接在“结果”窗格中编辑合并文件。解决当前文件中的所有合并冲突后,选择“接受合并”。对存在内容冲突的每个文件重复此步骤。

  1. 对于在一个分支中编辑并在另一个分支中删除的文件,请右键单击该文件,选择所需的分支操作。

  1. 在“Git更改”窗口中,输入一个提交消息并选择“提交已暂存内容”,以便在解决所有文件的所有合并冲突后完成合并。

使用Visual Studio 2019解决合并冲突

Visual Studio 2019版本16.8及更高版本提供Git版本控制体验,同时保留团队资源管理器Git用户界面。要使用团队资源管理器,请从菜单栏中取消选中“工具”>“选项”>“预览功能”>“新Git用户体验”。可以互换使用任一界面中的Git功能。

  1. 在团队资源管理器的“分支”视图中,签出目标分支。然后,右键单击源分支,选择“合并自”。

  2. 验证合并选项,然后单击“合并”。

  1. 如果Git因冲突而停止了合并,Visual Studio将通知你。在这种情况下,可以解决冲突,也可以取消合并,返回到合并前状态。要解决冲突,请选择“冲突”以打开“解决冲突”视图。

  1. “解决冲突”视图列出了存在合并冲突的文件。从列表中选择一个文件以查看该文件的解决选项。

  1. 对于内容中存在合并冲突的文件,选择“合并”以在合并编辑器中将其打开。

  1. 在合并编辑器中,“源”窗格显示源分支文件版本,“目标”窗格显示目标分支文件版本,“结果”窗格显示生成的合并文件。要应用特定的源或目标分支更改,请选中要保留的冲突行旁边的复选框。还可以直接在“结果”窗格中编辑合并文件。解决当前文件中的所有合并冲突后,选择“接受合并”。对存在内容冲突的每个文件重复此步骤。

  2. 对于在一个分支中编辑并在另一个分支中删除的文件,请选择所需的分支操作。

  1. 在“解决冲突”视图中,在解决所有文件的所有合并冲突后,选择“提交合并”。

  1. 在团队资源管理器的“更改”视图中,输入一个提交消息并选择“提交已暂存内容”以完成合并。

使用命令行解决合并冲突

在将源分支合并到目标分支之前,签出目标分支。然后,使用Git merge命令将源分支合并到当前本地分支(目标分支)。要将多个源分支合并到目标分支中,使用空格分隔源分支名称。

git checkout <target branch>
git merge <source branch>

解决文件内容冲突

  1. 在任何编辑器中打开文件以查看和解决冲突文本。Git添加了一组标记来指示冲突文本的实例。例如:
<<<<<<< HEAD
- Network controller
- Fiber optic transmitter
- Fiber optic transceiver
- Network switches
=======
- Network control
- Fiber optic transmitter
- Fiber optic transceiver
- Network switch
>>>>>>> origin/main

<<<<<<<和=======之间的文本是冲突文本的目标分支版本。=======和>>>>>>>之间的文本是冲突文本的源分支版本。

  1. 编辑文件以解决冲突文本。通过删除合并冲突标记,可以让Git知道你已解决冲突。例如,可以将前面的文本(包括冲突标记)更改为:
- Network controller
- Fiber optic transmitter
- Fiber optic transceiver
- Network switch
  1. 解决所有冲突文本后,运行git add 暂存文件。

  2. 对存在内容冲突的所有文件重复上述步骤。

解决删除-修改的文件冲突

当同一个文件在一个分支中被编辑,但在另一个分支中被删除时,就会发生删除-修改的文件冲突。对于每个删除-修改的文件,确定要使用哪个分支操作。然后,使用git add 保留修改的文件,或使用git rm 删除该文件。

后续步骤

通过推送共享代码撤消更改

本文原文来自微软官方文档,详细介绍了Azure DevOps中解决Git合并冲突的方法。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号