在项目开发过程,我们合并分支时经常会碰到冲突的问题,下面通过一个简单的例子演示下冲突是如何产生的以及如何去解决冲突。

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

提交代码并合并到主干

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 -> Alng@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-forwardREADME.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.git40c0115..ccb2626  master -> masterlng@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 -> Blng@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-forwardREADME.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_HEAD40c0115..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()
{
<<<<<<< HEADchar data[100] = "my branch name is B";
=======char data[100] = "my branch name is A";
>>>>>>> ccb26269f42245dfcbedfbf2218419c5ab7f2787int length = strlen(data);for(int i = 0; i < length; i++){printf("%c", data[i]);}<<<<<<< HEADprintf("branch BBB\n");
=======printf("branch AAA\n");
>>>>>>> ccb26269f42245dfcbedfbf2218419c5ab7f2787return 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.gitbdcbe03..f30e1ea  B -> Blng@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 diverged,
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-forwardREADME.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.gitccb2626..f30e1ea  master -> masterlng@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合并分支时如何解决冲突相关推荐

  1. 解决git合并分支时 报merging

    merging出现代表代码合并时出现的冲突* git reset --hard head --冲突时,代码使用本地的 git reset --hard 合并分支名 --冲突时 代码使用合并分支的 如果 ...

  2. git 合并分支时出现的异常解决方案----蓝字,提示输入提交信息的

    Please enter a commit message to explain why this merge is necessary. 请输入提交消息来解释为什么这种合并是必要的 解决办法: 1. ...

  3. Eclipse中git检出、更新、提交、合并分支、以及解决冲突

    一..检出git代码 在eclipse中空白区域右键 Import 检出项目:选择git方式检出 选择用git urI 链接的方式检出项目并点击继续 在这里填写你的git项目地址.账号密码 二.更新 ...

  4. idea+git合并分支解决冲突及详解

    1.什么是冲突 冲突是指当你在提交或者更新代码时被合并的文件与当前文件不一致.读起来有点绕,结合下面的案例理解. 从上面对冲突的定义来看,冲突时发生在同一个文件上的. 2.生产上冲突的场景 常见冲突的 ...

  5. git 主干修改合并到分支_idea+git合并分支解决冲突及详解步骤

    Git分支详解参考: 分支管理组成 1.1.master主干 在版本管理中,代码库应该仅有一个主干.此主干是和当前生产保持一致的,是可用的.稳定的可直接发布的版本,不能再主干上进行任何开发操作.git ...

  6. git合并分支产生冲突解决方案

    产生冲突 冲突产生的表现: 后面状态为 MERGING 冲突产生的原因: 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改. Git 无法替 我们决定使用哪一个.必须人为决定新代码内容 ...

  7. git merge 合并分支时遇上refusing to merge unrelated histories的解决方案

    文章目录 前言 方法一.合并分支时允许合并不相关的历史 方法二.使用 git reset --hard 命令将feature分支覆盖到master分支 前言 最近一个从其他地方迁入公司自己git服务的 ...

  8. git 移动分支指针_图解4种git合并分支方法

    有时候我们会后悔,有时候我们会想回到过去,有时候我们想改变历史,然而在我们这个世界,目前来看是无法回到过去改变历史的 但在git的世界里,一切皆有可能,我们可以在多维空间里任意切换,随意改变一个宇宙的 ...

  9. git合并分支Pulling is not possible because you have unmerged files.

    问题:目前在master分支上,执行git merge 分支A 报错error: Pulling is not possible because you have unmerged files. 解决 ...

最新文章

  1. 「Python」10个python项目
  2. 计算机视觉与深度学习 | 双目视觉SLAM之ORB-SLAM2的Matlab实现(完整代码)
  3. SDNU 1469.校门外的树(水题)
  4. 设计模式:观察者模式(Observer)
  5. javaweb----DAO模型设计
  6. JDK8新特性-java.util.function-Predicate接口
  7. 实现页面适配_微信公众号文章页面适配深色模式
  8. Ubuntu 下安装 输入法
  9. opensource项目_最佳Opensource.com:编程
  10. 模式识别之线性回归---最小二乘和线性回归
  11. listview 不可滑动问题解决
  12. 2015 上半年 JavaScript 使用统计数据
  13. Http第三方接口实现/异步Http请求
  14. SpringMVC学习(三)RestFul风格
  15. 快速获得Google Chrome最新版本
  16. 10款好用的谷歌chrome浏览器插件、扩展程序,用起来很爽哦
  17. python爬取企业电话_Python爬取天眼查企业数据
  18. 360网站查杀php专版,360网站木马查杀插件上线:可检测Struts2漏洞
  19. Nginx关闭或重启后nginx.pid丢失
  20. centos系统安装教程

热门文章

  1. Linux内存管理宏观篇(七)虚拟内存
  2. 同步和异步,阻塞非阻塞IO
  3. Nginix配置详解
  4. Apollo学习(超详细)
  5. 机器学习 —— Stacking算法
  6. 大数据行业人士必知10大数据思维原理,可以让机器人读懂你!
  7. 编一程序,输入月份,输出该月份的英文名。
  8. mysql having用法_数据库having的用法
  9. 荣耀v20会用鸿蒙吗,荣耀V20怎么升级鸿蒙系统 V20升级鸿蒙系统教程
  10. Oracle高级复制的同步复制的配置步骤说