git merge冲突怎么解决?详解Git合并冲突解决步骤

 更新时间:2026年08月31日 10:57:59   作者:大溪地C  
在Git多人协作开发中,合并分支时经常遇到冲突,本文通过实际案例,详细讲解如何解决git merge origin/master时的冲突问题,包括二进制文件冲突的解决方法、git status输出含义解析,以及如何验证所有冲突已解决,学会这些步骤,你也能轻松搞定Git合并冲突

前言

在使用 Git 进行代码管理时,合并分支是常见的操作之一。然而,在合并过程中可能会遇到冲突问题,尤其是在多人协作开发的场景下。

本文将详细介绍如何解决 Git 合并冲突,并结合实际案例分析 git status 的输出含义。

背景

在一次项目开发中,我需要将远程的 master 分支合并到本地的 chenjj 分支上。

在执行 git merge origin/master 时,遇到了文件冲突问题。以下是具体的操作步骤和解决方案。

问题描述

在执行以下命令时:git merge origin/master 这条命令的含义是将远程仓库 originmaster 分支的更改合并到当前分支中

git merge origin/master

终端输出了多个文件的冲突信息,包括普通文件(如 .js.vue.json)和二进制文件(如 .woff2.woff.ttf)。

最终,git status 显示所有冲突已解决,但没有明确指出普通文件的冲突情况。

解决步骤

Git 合并代码的基本流程

1.切换到目标分支

使用 git checkout <target-branch> 切换到需要合并代码的目标分支。

例如:

# 切换到目标分支(Chnejj)
git checkout Chnejj

2.执行合并操作

使用 git merge <source-branch> 将源分支的更改合并到目标分支。

例如: 

# 合并 Chnejj 分支到 master分支
git master Chnejj

3.查看当前分支状态

运行以下命令查看当前分支的状态

git status

输出示例:

92391@DESKTOP-NSDKPQ6 MINGW64 ~/Desktop/app/likeban-applet2 (chenjj|MERGING)
$ git status
On branch chenjj
Your branch and 'origin/chenjj' have diverged,
and have 5 and 20 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Changes to be committed:

        modified:   common/auth.js
        modified:   common/router.js
        modified:   common/scanAndQ.js
        new file:   components/news-components/news-ad.vue
        modified:   env_dev.js
        modified:   env_prod.js
        modified:   pages.json
        modified:   pages/app/index.vue
        modified:   pages/city/login/index.vue
        modified:   pages/city/login/login.vue
        modified:   pages/city/reveal/revealPage.vue
        modified:   pages/customerService/index.vue
        modified:   pages/governmentAffairs/hotwireFeedback/index.vue
        modified:   pages/gxbcyjs/jkzyjs/index.vue
        modified:   pages/gxbcyjs/yczyjs/index.vue
        modified:   pages/home/homeBusiness.vue
        modified:   pages/home/homePage.vue
        modified:   pages/home/subsistencePayment.vue
        modified:   pages/newsBusiness/index.vue
        modified:   pages/payment/heatingGs/history.vue
        new file:   pages/skipPage/Carousel.vue
        modified:   pages/skipPage/car.vue
        new file:   pages/skipPage/pay.vue
        modified:   pages/venueReservation/components/appointmentDetial.vue
        modified:   pages/venueReservation/components/bookingDetial.vue
        new file:   pages/venueReservation/components/notice.vue
        new file:   pages/venueReservation/feedback.vue
        modified:   pages/venueReservation/index.vue
        modified:   pages/venueReservation/my.vue
        modified:   pages/wuye/WuyeMain.vue
        modified:   pages/wuye/districtReport/districtReport.vue
        modified:   store/index.js

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:   static/iconfont/iconfont.css
        both modified:   static/iconfont/iconfont.ttf
        both modified:   static/iconfont/iconfont.woff
        both modified:   static/iconfont/iconfont.woff2

解释:

  • 当前分支 chenjj 和远程分支 origin/chenjj 已经分叉。
  • 所有冲突已经解决,但合并尚未完成。
  • 列出了即将提交的更改文件。

4.开始关键性的解决冲突

解决二进制文件冲突:

  • 保留本地版本:git checkout --ours -- <文件路径>
  • 保留远程版本:git checkout --theirs -- <文件路径>
#保留本地文件的指令 (我选择是保留本地的文件)

git checkout --ours -- static/iconfont/iconfont.woff2
git checkout --ours -- static/iconfont/iconfont.woff
git checkout --ours -- static/iconfont/iconfont.ttf
git checkout --ours -- static/iconfont/iconfont.css



# 保留远程的指令

git checkout --theirs -- static/iconfont/iconfont.woff2
git checkout --theirs -- static/iconfont/iconfont.woff
git checkout --theirs -- static/iconfont/iconfont.ttf
git checkout --theirs -- static/iconfont/iconfont.css


# 选择完成之后还需要对刚才保留下来的文件进行提交

git add static/iconfont/iconfont.woff2
git add static/iconfont/iconfont.woff
git add static/iconfont/iconfont.ttf
git add static/iconfont/iconfont.css

解决冲突的指令:

提交保留下来的文件的指令:

此时我们已经解决完成了冲突,但是我们还是再写入查看当前分支状态的指令,再次确定一下所有的冲突都解决完成了

$ git status

 

此时输入指令之后,提示信息中没有冲突的提示了,这就证明了我们已经解决了所有的冲突

5. 理解为什么没有显示普通文件的冲突

冲突已经解决:

  • 在之前的合并过程中,Git 提示了一些普通文件存在内容冲突(如 common/auth.jspages.json 等)。
  • 我手动编辑了这些文件,删除了冲突标记(<<<<<<< HEAD=======>>>>>>> origin/master),并保留了需要的内容。
  • 使用 git add <文件路径> 标记这些文件为已解决。

当前状态是“所有冲突已解决”:

  • git status 显示 All conflicts fixed but you are still merging.,说明冲突已经解决。
  • 普通文件现在属于“Changes to be committed”,不会再显示为冲突文件。

验证是否还有未解决的冲突

为了确保没有遗漏的冲突,可以运行以下命令:

检查是否有未解决的冲突文件:

git diff --name-only --diff-filter=U

执行的 git diff --name-only --diff-filter=U 命令用于列出所有未解决的合并冲突文件。

--name-only 参数表示只显示文件名,不显示具体的差异内容,而 --diff-filter=U 参数表示只显示那些存在未解决冲突(Unmerged)的文件。

该命令的输出结果是空的、没有输出任何文件名,这意味着在执行该命令时,已经没有未解决的冲突文件了,或者您可能需要先运行 git add 命令将解决冲突后的文件标记为已解决。

6. 完成合并

在确认所有冲突都已经解决后,运行以下命令完成合并

$ git commit -m "解决合并冲突"

7. 推送更改到远程

完成合并后,将本地分支推送到远程:

$ git push origin chenjj:chenjj

如果远程分支已经有新的提交记录,而你的本地分支没有包含这些记录,Git 可能会拒绝推送。

此时需要先拉取远程分支的更改并解决冲突:

git pull origin chenjj

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Git撤回已经提交(甚至已push)的代码,但把改动留在本地的解决

    Git撤回已经提交(甚至已push)的代码,但把改动留在本地的解决

    这篇文章主要介绍了Git撤回已经提交(甚至已push)的代码,但把改动留在本地的解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2026-05-05
  • Git提交代码详细流程及问题总结

    Git提交代码详细流程及问题总结

    这篇文章主要介绍了Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下
    2025-02-02
  • http 200、301、304等状态码详解

    http 200、301、304等状态码详解

    在利用httpwatch进行抓包分析时,我们经常会看到200、301、304这几个状态码。具本三者是什么意思呢?这里脚本之家小编就为大家介绍一下
    2017-07-07
  • git rebase 成功之后撤销的操作方法

    git rebase 成功之后撤销的操作方法

    这篇文章主要介绍了git rebase 成功之后如何撤销,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 教你如何在WordPress发布文章时自定义文章作者名称

    教你如何在WordPress发布文章时自定义文章作者名称

    这篇文章主要介绍了如何在WordPress发布文章时自定义文章作者名称
    2021-09-09
  • 用户权限管理设计[图文说明]

    用户权限管理设计[图文说明]

    用户管理权限设计一直是大家讨论的热点,因为几乎涉及到每一个开发的业务系统。我找了很多很多的资料,大家的核心基本上都是一样的:基于角色管理. 用户,角色,模块,权限的相互组合,就可以形成一个强大的权限管理系统。
    2008-12-12
  • 微信 小程序开发环境搭建详细介绍

    微信 小程序开发环境搭建详细介绍

    这篇文章主要介绍了微信 小程序开发环境搭建详细介绍的相关资料,需要的朋友可以参考下
    2016-09-09
  • IE 浏览器安全级别详情及区别小结

    IE 浏览器安全级别详情及区别小结

    排查问题时,定位到可能和当前浏览器的安全级别设置有关,顺便整理了下Windows 7下IE9安全级别的详情内容,及各安全级别下的默认设置差异
    2016-01-01
  • Scratch3.0二次开发之windows环境下打包成exe的流程

    Scratch3.0二次开发之windows环境下打包成exe的流程

    今天通过本文给大家分享Scratch3.0二次开发之windows环境下打包成exe的详细流程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08
  • Git Tag打、切换、推送和删除的操作指南

    Git Tag打、切换、推送和删除的操作指南

    本篇文章详细介绍了Git标签(tag)的的使用方法,包括标签的定义、与分支(branch)的区别、常见操作如创建、查看、推送等删除标签,以及如何基于标签部署代码和切换版本,文章还提供了完整的发版流程示例和常用命令速查表,帮助开发者更高效地地地代码版本
    2026-05-05

最新评论