如何解决 Git 合并冲突

当您遇到合并冲突时,请不要惊慌。通过一些专家级的协商,您可以解决任何冲突。
5 位读者喜欢这篇文章。
Coding on a computer

假设您和我正在处理同一个名为 index.html 的文件。我对该文件进行了一些更改,提交了这些更改,并将更改推送到远程 Git 仓库。您也对同一个文件进行了一些更改,提交了这些更改,并开始将更改推送到同一个 Git 仓库。但是,Git 检测到冲突,因为您所做的更改与我所做的更改冲突。

以下是如何解决冲突的方法

  1. 从远程仓库获取并合并最新更改

    $ git pull
  2. 识别一个或多个冲突文件

    $ git status
  3. 使用文本编辑器打开冲突文件

    $ vim index.html
  4. 解决冲突。冲突的更改用 <<<<<<< HEAD>>>>>>> 标记。您需要选择保留哪些更改,以及丢弃哪些更改。手动编辑文件以合并冲突的更改。 

    这是一个例子

    <<<<<<< HEAD
    <div class="header">
    <h1>Sample text 1</h1>
    </div>
    =======
    <div class="header">
    <h1>Sample text 2</h1>
    </div>
    >>>>>>> feature-branch

    在这个例子中,我将网站标题更改为 Sample text 1,而您将标题更改为 Sample text 2。这两个更改都已添加到文件中。您现在可以决定保留哪个标题,或编辑文件以合并更改。在任何一种情况下,删除指示更改开始和结束的标记,只留下您想要的代码

    <div class="header">
    <h1>Sample text 2</h1>
    </div>
  5. 保存您的所有更改,并关闭编辑器。

  6. 将文件添加到暂存区

    $ git add index.html
  7. 提交更改

    $ git commit -m "Updated h1 in index.html"

    此命令提交更改,并附带消息 Resolved merge conflict

  8. 将更改推送到远程仓库

    $ git push

结论

 合并冲突是让您专注于代码更改的一个好理由。您在一个文件中更改的内容越多,发生冲突的可能性就越大。您应该进行更多提交,每次提交的更改更少。您应该避免进行将多个功能增强或错误修复合并为一个的整体性更改。您的项目经理也会感谢您,因为意图明确的提交更容易跟踪。Git 合并冲突乍一看可能令人生畏,但现在您知道如何操作了,您会发现它很容易解决。

标签
Avatar
Agil 拥有超过 6 年的技术写作经验,专门为软件产品制作准确、清晰和简洁的文档。他有能力向包括开发人员、工程师和最终用户在内的各种受众传达技术思想。

2 条评论

我总是建议人们将以下内容添加到他们的 ~/.gitconfig 文件中

[merge]
conflictstyle = diff3

有了这个设置,当出现冲突时,您不仅会看到两个来源(您的文本和要合并的文件中的冲突文本),还会看到一个文本块,表示冲突区域的共同祖先文本。

这通常提供非常有用的信息来帮助解决冲突。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.