0

0

git怎么解决合并冲突

WBOY

WBOY

发布时间:2022-06-24 11:30:13

|

35093人浏览过

|

来源于php中文网

原创

git解决合并冲突的方法:1、编辑有冲突的文件,并删除文件中的特殊符号,根据需求修改代码;2、将指定文件添加到暂存区,并将指定的分支提交到主干,执行提交即可,其中使用“git commit”命令时不能带文件名,  加文件名会报错。

git怎么解决合并冲突

本文操作环境:Windows10系统、Git2.30.0版、Dell G3电脑。

git怎么解决合并冲突

git冲突

多个分支代码合并到一个分支时,两个分支中修改了同一个文件,不管是什么地方修改,都会产生;

还有一种 两个分支中修改了同一个文件的名称时会产生。

原因

合并分支时,两个分支在同一个文件有两套完全不同的修改。Git 无法替

我们决定使用哪一个。必须人为决定新代码内容。

解决方法

编辑有冲突的文件,删除特殊符号,决定要使用的内容

添加到暂存区

执行提交(注意:此时使用 git commit 命令时不能带文件名,  加文件名会报错,成功提交后,merging消失)

示例如下:

1、冲突的产生

1.1、主干分支代码

        在主干分支有两个文件

        main.cpp

#include <stdio.h>
#include <string.h>

int main()
{
	char data[100] = "my branch name is master";
	int length = strlen(data);
	
	for(int i = 0; i < length; i++)
	{
		printf("%c", data[i]);
	}
	
	printf("branch master\n");
	
	return 0;
}

        README.md

this is master branch

 这个时候tom和jack分别拉取了主干分支的代码,并进行了修改。

1.2、tom修改代码提交合并

tom创建A分支并对文件做了以下修改

main.cpp

#include <stdio.h>
#include <string.h>

int main()
{
	char data[100] = "my branch name is A";
	int length = strlen(data);
	
	for(int i = 0; i < length; i++)
	{
		printf("%c", data[i]);
	}
	
	printf("branch AAA\n");
	
	return 0;
}

README.md

this is AAA branch

提交代码并合并到主干

OneStory
OneStory

OneStory 是一款创新的AI故事生成助手,用AI快速生成连续性、一致性的角色和故事。

下载
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (A)
$ git add .

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (A)
$ git commit -m "A分支代码提交"
[A ccb2626] A分支代码提交
 2 files changed, 3 insertions(+), 3 deletions(-)

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (A)
$ git push origin A
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 376 bytes | 376.00 KiB/s, done.
Total 4 (delta 1), reused 3 (delta 1), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
remote: Create a pull request for 'A' on Gitee by visiting:
remote:     https://gitee.com/lingpe/kaol/pull/new/lingpe:A...lingpe:master
To https://gitee.com/lingpe/kaol.git
 * [new branch]      A -> A

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (A)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (master)
$ git merge A
Updating 40c0115..ccb2626
Fast-forward
 README.md | 2 +-
 main.cpp  | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (master)
$ git push origin master
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To https://gitee.com/lingpe/kaol.git
   40c0115..ccb2626  master -> master

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (master)
$

1.3、jack修改代码提交合并

jack对代码做了如下修改

main.cpp

#include <stdio.h>
#include <string.h>

int main()
{
	char data[100] = "my branch name is B";
	int length = strlen(data);
	
	for(int i = 0; i < length; i++)
	{
		printf("%c", data[i]);
	}
	
	printf("branch BBB\n");
	
	return 0;
}

README.md

this is BBB branch

提交代码并合并到主干

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B)
$ git add .

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B)
$ git commit -m "B分支代码提交"
[B bdcbe03] B分支代码提交
 2 files changed, 3 insertions(+), 3 deletions(-)

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B)
$ git push origin B
Enumerating objects: 53, done.
Counting objects: 100% (53/53), done.
Delta compression using up to 12 threads
Compressing objects: 100% (34/34), done.
Writing objects: 100% (50/50), 4.66 KiB | 2.33 MiB/s, done.
Total 50 (delta 16), reused 43 (delta 12), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
remote: Create a pull request for 'B' on Gitee by visiting:
remote:     https://gitee.com/lingpe/kaol/pull/new/lingpe:B...lingpe:master
To https://gitee.com/lingpe/kaol.git
 * [new branch]      B -> B

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (master)
$ git merge B
Updating 40c0115..bdcbe03
Fast-forward
 README.md | 2 +-
 main.cpp  | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (master)
$

 push时产生冲突

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (master)
$ git push origin master
To https://gitee.com/lingpe/kaol.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://gitee.com/lingpe/kaol.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (master)
$

2、解决冲突

        接下来就是如何解决冲突

        切换回B分支,然后拉取主干分支代码

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B)
$ git pull origin master
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 356 bytes | 178.00 KiB/s, done.
From https://gitee.com/lingpe/kaol
 * branch            master     -> FETCH_HEAD
   40c0115..ccb2626  master     -> origin/master
Auto-merging main.cpp
CONFLICT (content): Merge conflict in main.cpp
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

        拉取失败,可以看到提示信息,告诉我们哪个文件产生了冲突。

        直接打开main.cpp文件,可以看到有以下特殊字符,提示我们哪一行代码产生了冲突。

#include <stdio.h>
#include <string.h>

int main()
{
<<<<<<< HEAD
        char data[100] = "my branch name is B";
=======
        char data[100] = "my branch name is A";
>>>>>>> ccb26269f42245dfcbedfbf2218419c5ab7f2787
        int length = strlen(data);

        for(int i = 0; i < length; i++)
        {
                printf("%c", data[i]);
        }

<<<<<<< HEAD
        printf("branch BBB\n");
=======
        printf("branch AAA\n");
>>>>>>> ccb26269f42245dfcbedfbf2218419c5ab7f2787

        return 0;
}

        直接在文件中手动解决冲突。删除文件中的特殊字符,然后根据需求修改代码。

#include <stdio.h>
#include <string.h>

int main()
{
        char data[100] = "my branch name is B and A";
        int length = strlen(data);

        for(int i = 0; i < length; i++)
        {
                printf("%c", data[i]);
        }

        printf("branch BBB\n");
        printf("branch AAA\n");
        return 0;
}
~

        同理,对README.md,手动解决冲突。

this is BBB and AAA branch

解决完冲突后提交到B分支

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B|MERGING)
$ git add .

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B|MERGING)
$ git commit -m "解决冲突"
[B f30e1ea] 解决冲突

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B)
$ git push origin B
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 405 bytes | 405.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To https://gitee.com/lingpe/kaol.git
   bdcbe03..f30e1ea  B -> B

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B)
$

最后将B分支合并到主干,就不会产生冲突了

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B)
$ git checkout master
Switched to branch 'master'
Your branch and 'origin/master' have perged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (master)
$ git merge B
Updating bdcbe03..f30e1ea
Fast-forward
 README.md | 2 +-
 main.cpp  | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (master)
$ git push origin master
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To https://gitee.com/lingpe/kaol.git
   ccb2626..f30e1ea  master -> master

lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (master)
$

至此,冲突成功解决

可以看下主干分支的代码

main.cpp

#include <stdio.h>
#include <string.h>

int main()
{
	char data[100] = "my branch name is B and A";
	int length = strlen(data);
	
	for(int i = 0; i < length; i++)
	{
		printf("%c", data[i]);
	}
	
	printf("branch BBB\n");
	printf("branch AAA\n");
	return 0;
}

README.md

this is BBB and AAA branch

OK

推荐学习:《Git教程

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

2

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

56

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

30

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

59

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

25

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

79

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

61

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

50

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

47

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 4万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.6万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 94人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号