来源:https://www.liuhaolin.com/git/115.html

git中合并冲突是在不同的分支中同一个文件的内容不同导致的,如果进行合并就会冲突。文件可能是新增的文件,比如在两个分支中都新建了同一个文件,但是他们的内容不同,或是在两个分支中都更新了同一个文件,但是更新的内容不同。最终导致同一文件在不同的分支中内容不同。如果需要进行合并,就必须人工解决冲突,或者撤销合并。

"创建一个有冲突的合并"

          git解决冲突示例

初始化一个仓库,然后创建一个 dev分支,分支里添加一个文件 master-dev.txt,然后提交到 dev分支。切换到 master分支,同样的操作也是提交了同一个文件master-dev.txt,同样提交到master 分支中,但是这两个文件的内容是不同的。如果想把 dev的分支提交到master中,代码就会有冲突。

创建“冲突”

echo "测试-代码提交冲突" > README
git init .
git add .
git commit -m 'init'
# 创建一个 dev 分支,并切换到dev分支
git checkout -b dev # 当前的分支 dev
git branch
#* dev
# master
echo "dev" > master-dev.txt # 在dev分支中提交
git commit -m '[dev branch ]add file master-dev.txt' git checkout master
echo "master" > master-dev.txt
git add .
git commit -m '[master branch ]add file master-dev.txt'

把dev分支的代码合并的master中,看看什么情况。

# 把 dev分支的代码合并到当前的分支,也就是 master 分支中
git merge dev #自动的合并文件 master-dev.txt
Auto-merging master-dev.txt # 提示了冲突, 合并冲突在 master-dev.txt
CONFLICT (add/add): Merge conflict in master-dev.txt # 自动合并失败, 修改一个冲突,然后提交结果
Automatic merge failed; fix conflicts and then commit the result.

  出现了冲突,这是时候 master-dev.txt 的内容会被修改,会把两个分支中的文件内容都 汇集 master-dev.txt 文件中。

cat master-dev.txt
<<<<<<< HEAD
master
=======
dev
>>>>>>> dev

  需要注意的地方是,产生了冲突,并且当前的文件 master-dev.txt被修改了。这个时候,只能是先解决冲突。再进行下一步操作。比如想看一下 dev分支中的文件 master-dev.txt 的内容是否也被修改了,这个时候看不了,因为要先解决冲突。事实上,出现冲突的时候,是不能切换分支的。这样有个好处就是,就是防止有问题的代码污染了其他的分支。

git checkout dev
master-dev.txt: needs merge
# 必须先解决当前的索引区的冲突
error: you need to resolve your current index first

解决代码合并中的冲突

  git使用 7个左键箭头 + 当前分支,7个等号和7个右箭头 + 当前分支 来表示冲突的代码,一共是三行。解决冲突就是修改代码后,并删除这三行。比如本次的修改就是删除这三行。

  

cat master-dev.txt
master
dev

  修改后看下当前的状态

git status
On branch master
# 存在没有合并成功的部分
You have unmerged paths.
# 修正错误,并提提交
(fix conflicts and run "git commit")
# 使用 git merge --about 终止合并
(use "git merge --abort" to abort the merge) # 没有合并的文件
Unmerged paths:
(use "git add <file>..." to mark resolution)
both added: master-dev.txt

  修改了冲突的文件,冲突并没有得到解决 ,因为文件并没有提交。没有继续合并,或者撤销合并。所以依然不能切换分支的。

git checkout dev
master-dev.txt: needs merge
error: you need to resolve your current index first

  这里进行提交一下看看结果。

git add master-dev.txt
git commit -m 'both commit' # 当前的分支是 master
cat master-dev.txt
master
dev # 切换到dev分支
cat master-dev.txt
dev
# 可以看到dev分支的内容换是原来的内容,并没有改变。

  这样就合并了有冲突的分支, 现在有一个问题,就是 dev分支的内容和 master分支的内容是不同的。如何同步能?

# 在dev分支中,更新master中的内容
git rebase master #First, rewinding head to replay your work on top of it...
#Fast-forwarded dev to master. # 这个表明,现在 dev分支的内容和master分支的内容是一致的。
cat master-dev.txt
master
dev

  

git分支学习笔记2-解决合并的冲突的更多相关文章

  1. git的学习笔记(二):git远程操作

    1.创建ssh key ssh-keygen -t rsa -C "your_email@example.com" 执行命令后会在用户的家目录生成.ssh的隐藏文件夹,文件夹里有公 ...

  2. [常用工具] git基础学习笔记

    git基础学习笔记,参考视频:1小时玩转 Git/Github 添加推送信息,-m= message git commit -m "添加注释" 查看状态 git status 显示 ...

  3. 【整理】解决vue不相关组件之间的数据传递----vuex的学习笔记,解决报错this.$store.commit is not a function

    解决vue不相关组件之间的数据传递----vuex的学习笔记,解决报错this.$store.commit is not a function https://www.cnblogs.com/jaso ...

  4. LevelDB 学习笔记2:合并

    LevelDB 学习笔记2:合并 部分图片来自 RocksDB 文档 Minor Compaction 将内存数据库刷到硬盘的过程称为 minor compaction 产出的 L0 层的 sstab ...

  5. git 学习笔记 --创建与合并分支

    在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而 ...

  6. GIT 分支管理:创建与合并分支、解决合并冲突

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

  7. Git分支(5/5) -- 解决合并的冲突

    如果两个分支上都对同一个文件进行了修改, 那么就有可能发生冲突. 首先创建一个分支, 并切换到该分支上: 然后修改index.html, 修改几个地方吧. 然后查看状态, 并commit: 然后切换到 ...

  8. Git-第五篇廖雪峰Git教程学习笔记(4)分支

    1.一开始,只有一个主分支(master),HEAD指向Master,而Master指向主分支.现在我们创建dev分支. lfy@lfy-PC MINGW64 /c/fyliu/lfyTemp/git ...

  9. HIT2019春软件构造->Git&Github学习笔记

    由于软件构造课程需要,学习使用git,以下作为学习笔记. 一.Git初始化及仓库创建和操作  1.基本信息设置(设置签名)  命令        项目级别/仓库级别:仅在当前本地库范围内有效 git ...

  10. git的学习笔记整理

    Git学习较好的网址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373 ...

随机推荐

  1. redis三主三从集群快速搭建

    redis集群快速搭建 1 本文以redis6.2.6版本为例,快速搭建一套三主三从的redis集群,已经提前将脚本写好,只需要在节点上面进行执行即可安装 #!/bin/bash install_re ...

  2. Python作图三维等高面

    技术背景 对于等高线,大家都是比较熟悉的,因为日常生活中遇到的山体和水面,都可以用一系列的等高线描绘出来.而等高面,顾名思义,就是在三维空间"高度一致"的曲面.当然了,在二维平面上 ...

  3. ECMA 2023(ES14) 新特性

    ECMAScript 2023 主要包含内容 ECMAScript 2023 于 2023 年 6 月 27 日获得 ECMA International 的批准. ECMAScript 是标准化的 ...

  4. 树莓派 ubuntu server 22.x 连接无线网络

    前言 树莓派系统安装完成后,需要配置网络,由于家里没有多余的网线(网线多少有点乱),所以决定配置无线上网的方式,现在记录下来操作过程 具体操作 sudo nano /etc/netplan/xxxxx ...

  5. nginx002: NGINX的环境变量,基本命令参数,目录关系及gzip优化

    NGINX的环境变量,基本命令参数,目录关系及gzip优化 添加环境变量 nginx命令执行方式 nginx [选项] [参数] 通过编译安装的nginx 默认是没有环境变量的,如何设置环境变量,让n ...

  6. liquibase常用操作

    1.概述 Liquibase是一个用于跟踪.管理和应用数据库变化的开源的数据库重构工具.它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制. 本文旨在将平时工作中常用的一些操作进 ...

  7. C#.NET与JAVA互通之AES加密解密V2024

    C#.NET与JAVA互通之AES加密解密V2024 视频: 注意点: 1. KEY 和 IV 从字符串转byte数组时,双方要约定好编码,一般是UTF8. 2.明文从字符串转byte数组时,双方要约 ...

  8. C# .NET HttpWebRequest 按每个(单个)请求跳过证书校验

    C# .NET HttpWebRequest 按每个(单个)请求跳过证书校验 自签名证书 HTTPS TLS . 使用.NET 4.5 新加的属性 HttpWebRequest.ServerCerti ...

  9. 图片jpg,png转为BASE64编码

    -- using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace aliy ...

  10. python 简单剖析及语法基础

    1.Python的应用领域 WEB开发 网络编程 爬虫 云计算 人工智能.数据分析 自动化运维  金融分析  科学运算  游戏开发 2.Python的发展前景 知乎上有一篇文章,问Python未来10 ...