来源: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. 低代码与 Echarts 融合:开启智能可视化的创新浪潮

    前言 在当今数字化时代,数据的价值愈发凸显,企业和组织需要有效地利用数据来作出战略决策和优化业务流程.可视化是一种强大的工具,可以将复杂的数据以直观的方式展现出来,帮助用户更好地理解和分析数据.近年来 ...

  2. golang 怎么获取kubernetes deployments的状态?

    如果我们需要把k8s的信息展示为一个友好的web页面.那么deployment 的信息基本上是非常重要的(大部分的服务都是使用deployment部署). 从yaml 中我们能获取到很多关于deplo ...

  3. WPF开发快速入门【1】WPF的布局

    概述 本文描述几款WPF中常用的布局控件. Grid Grid是WPF最常用的布局控件. 它把面板分割为固定长和宽的网格,子控件就放置在网格内. <Grid> <Grid.Colum ...

  4. 『手撕Vue-CLI』函数柯里化优化代码

    开篇 在上一篇文章中,给 nue-cli 添加了拉取版本号的功能,这一次来优化一下代码,使用函数柯里化的方式来优化代码. 实现 函数柯里化 函数柯里化是一种将使用多个参数的一个函数转换成一系列使用一个 ...

  5. mediaserverd

    1.mediaserverd是什么 mediaserverd(/usr/sbin/mediaserverd)是被root进程launchd启动的一个后台(daemon)进程,其描述文件为com.app ...

  6. wordpress博客系统

    wordpress博客系统 LNMP:Linux+nginx+mysql+php 一个操作系统+web网站+一个数据库存放数据+后端编程语言 基于红帽操作系统来搭建 1.需要一个本地yum仓库 [ro ...

  7. INFINI Console 与华为鲲鹏完成产品兼容互认证

    何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务(含公有云.私有云.混合云.桌面云)推出的一项合作伙伴计划,旨在为构建持续发展.合作共赢的鲲鹏生态圈,通过整合华为的技术.品牌资源,与合作伙伴共享商 ...

  8. SRE 排障利器,接口请求超时试试 httpstat

    夜莺资深用户群有人推荐的一个工具,看了一下真挺好的,也推荐给大家. 需求场景 A 服务调用 B 服务的 HTTP 接口,发现 B 服务返回超时,不确定是网络的问题还是 B 服务的问题,需要排查. 工具 ...

  9. 轻松实现H5页面下拉刷新:滑动触发、高度提示与数据刷新全攻略

    前段时间在做小程序到H5的迁移,其中小程序中下拉刷新的功能引起了产品的注意.他说到,哎,我们迁移后的H5页面怎么没有下拉刷新,于是乎,我就急忙将这部分的内容给填上. 本来是计划使用成熟的组件库来实现, ...

  10. 通俗理解GAN -- 基础认知

    Smiling & Weeping ---- 你已春风摇曳,我仍一身旧雪 1.GAN的基本思想 GAN全称对抗生成网络,顾名思义是生成模型的一种,而他的训练则是一种对抗博弈状态中的.下面我们举 ...