如何解决Git中的合并冲突?详细操作步骤指南

2021年11月20日03:07:01 发表评论 1,419 次浏览

介绍

Git中的合并冲突如何解决?该git merge命令帮助贡献者从分支添加到项目。这个概念是协作编程的核心思想之一,允许多人在他们的部分代码上工作而没有任何冲突。

当多个贡献者在代码的同一部分工作或使用多个分支时,必然会发生合并冲突。的主要目标git merge是自动解决或警告这些冲突。

如何解决Git中的合并冲突本指南解释了合并冲突是什么,并提供了解决方法,以解决无法自动解决的问题。这篇文章还提供了防止 Git 合并冲突的有用提示,包括Git合并冲突的解决方法

先决条件

  • Git 已安装和配置(在Windows、Mac和Ubuntu 上)。
  • 本地和远程分支之间的 git 合并冲突。
  • 访问终端或命令行
  • 本教程的 Vim 编辑器(要安装 Vim,请遵循我们的指南之一:如何在 Ubuntu 18.04上安装 Vim 8.2或如何在 CentOS 7 上安装 Vim 8.2)

什么是 Git 合并冲突?

使用 Git 等版本控制系统时,大多数合并冲突会自动解决。但是,也存在git merge无法解决问题的情况。

注意:查看我们方便的Git 命令备忘单,其中包含常用命令,例如git merge.

合并冲突的一些示例包括:

  • 更改文件中的相同代码行。
  • 在另一个地方发生更改时删除文件。

由于问题发生在本地,而其他项目成员并不知道该问题,因此解决冲突具有高优先级,需要立即修复。

Git 合并冲突的类型

合并冲突的一般类型取决于问题出现的时间。冲突发生在:

  • 合并前,表示有本地更改不是最新的。在合并开始之前会出现冲突错误消息以避免出现问题。
  • 在合并期间,表明存在覆盖问题。出现错误消息并停止合并过程以避免覆盖更改。

如何解决 Git 中的合并冲突

在 Git 中解决合并冲突的方法有以下三种

1.接受本地版本。要接受来自本地版本的文件的所有更改,请运行:

git checkout --ours <file name>

或者,要接受所有冲突文件的本地版本,请使用:

git merge --strategy-option ours

2.接受远程版本。要从远程分支更新文件的更改,请运行:

git checkout --theirs <file name>

接受所有冲突文件的远程版本:

git merge --strategy-option theirs

3.单独审查更改。最后一个选项是分别查看每个更改。此选项也是最佳选择,尤其是在处理多个文件和人员时。为了使这项工作更易于管理,请使用特殊工具来帮助查看个别冲突。

最终,选择保留哪些代码部分以及不保留哪些部分取决于开发人员对当前项目的决定。

在 Git 中遇到合并冲突

如何解决Git中的合并冲突?Git 中的合并冲突发生在命令git merge抛出错误时。

如何解决Git中的合并冲突?详细操作步骤指南

错误消息会打印有关冲突所在位置的信息。从错误信息中查看文件,查看发生合并冲突的内容:

如何解决Git中的合并冲突?详细操作步骤指南

Git 会自动在冲突的代码行旁边添加三个指标:

  • <<<<<<<(七个“小于”字符)后跟HEAD,它是当前分支的别名。符号表示此部分中编辑的开始。
  • ========(七个“等号”字符),显示当前分支中修订的结束和新分支中编辑的开始。
  • >>>>>>(七个“大于”字符)后跟尝试合并的分支。添加的符号表示冲突分支内编辑的结束。

添加的语法有助于搜索代码以找到合并冲突的位置。但是,更直接的方法是使用差异/合并工具来发现问题并跟踪更改。

在 Git 中设置默认 Diff 工具

Git中的合并冲突如何解决?为 设置默认差异工具git mergetool

1. 在终端中运行以下行:

git mergetool --tool-help

输出打印出当前设置的所有支持的差异工具:

如何解决Git中的合并冲突?详细操作步骤指南

根据选择的编辑器,可以使用不同的工具。例如:

  • Emacs差异工具:Ediff 或emerge
  • Vim差异工具:vimdiff、vimdiff2 或 vimdiff3

Git合并冲突的解决方法:进一步的步骤显示了如何为 Vim设置vimdiff工具的示例。

2.更改git config设置默认合并工具:

git config merge.tool <tool name>

例如,如果使用 Vim,请运行:

git config merge.tool vimdiff

3. 设置 diff 工具以显示两个文件的共同祖先,即任何编辑之前的版本:

git config merge.conflictstyle diff3

4、设置选项运行前不提示:

git config mergetool.prompt false

Git 的 diff 工具设置已完成。

使用 Mergetool 查看差异

如何解决Git中的合并冲突?要使用mergetool 并查看差异,请运行:

git mergetool
如何解决Git中的合并冲突?详细操作步骤指南

输出显示一个具有四个视图的窗口:

1. LOCAL代表来自当前分支的文件版本。

2. BASE是文件在任何更改之前的样子。

3. REMOTE显示文件在冲突信息所在的远程分支中的外观。

4. MERGED有最终的合并文件。此结果表示保存到存储库的内容。

这些窗口之间的主要导航命令是:

  • CTRL+WW在窗口之间移动。
  • CTLR+WJ跳转到合并窗口视图。
  • CTRL+WX切换窗口位置。

对于高级导航,可通过命令获取信息:help window-moving

更新和解决合并冲突

更新 MERGED 文件以解决冲突。更新 MERGED 版本的一些快捷方式包括:

  • :diffg LOCAL更新到 LOCAL 版本。
  • :diffg BASE更新到 BASE 版本。
  • :diffg REMOTE更新到 REMOTE 版本。

注意:在运行这些命令之前,确保光标位于冲突所在的行上。

一旦信息被更新,保存并退出用:wqa

提交和清理

Git合并冲突的解决方法:最后一步是提交和清理额外的文件。通过运行提交更新的版本:

git commit -m "<your message>"

注意:如果你在提交时犯了错误,你可以撤消最后一次提交。

diff 工具会在项目上创建额外的文件来比较版本。用以下方法清理它们:

git clean -f
如何解决Git中的合并冲突?详细操作步骤指南

关于如何防止合并冲突的提示

Git中的合并冲突如何解决?合并冲突仅在计算机无法自动解决问题时发生。

以下是有关如何防止合并冲突的一些提示:

  • 尽可能使用新文件而不是现有文件。
  • 避免在文件末尾添加更改。
  • 尽可能频繁地推送和拉动更改。
  • 不要美化代码或自行组织导入。
  • 通过牢记在同一代码上工作的其他人,避免单独程序员的心态。

结论

如何解决Git中的合并冲突?在 Git 或其他版本控制程序中工作时不时会发生合并冲突。通过遵循本指南中的说明,你知道如何处理合并冲突以及如何防止它们发生。

如需更多 Git 资源,请查看我们关于什么是 Git 上游和如何设置上游分支的文章。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: