一:背景

Neo君之前在写东西时,都是自己负责各自的模块,没有出现代码拉下来冲突的情况。最近Neo君在搞一搞前端的东东,跟同事功能有些冲突,所以就难免会冲突。

所以简单总结下,这次针对的情况是不同的用户修改了同一文件的同一区域,合并时会遇到冲突而导致合并中断。

Neo君之前常用的git命令(git rebase没怎么用过,以后有时间研究下):

  • git pull
  • git push

Neo君的环境:

  • Mac OS
  • zsh(terminal): 之前直接在IDEA里操作的,发现还是喜欢直接敲命令行;Windows的童鞋,使用“小乌龟”可能会更方便。

解决冲突的操作了解后,依据具体的Git环境,具体的步骤会有些差异。

二:过程

执行git pull命令,提示出错(原谅没有截图):

remote:Counting objects: 12,done.
...
Auto-merging com/xx/xx/Test.js
CONFLICT(content): Merge conflict in com/xx/xx/Test.js
Automatic merge failed;fix conficts and then commit the result.

使用git status 可看到该文件处于未合并状态(仅供参考):

...
#Unmerged path:
# (Use "git add/rm <file>..." as appropriate to mark resolution)
...

Git通过.git目录下的几个文件记录合并过程和冲突:

  • .git/MERGE_HEAD 记录所合并的提交ID
  • .git/MERGE_MSG 记录合并失败信息
  • .git/MERGE_MODE 标识合并状态

冲突后版本暂存库会记录冲突文件的不同版本,git ls-files -s 查看:

100644 ea51xxxxxxxxxxxc2 1         com/xx/xx/Test.js  #编号1:冲突双方共同的祖先版本
100644 ea51xxxxxxxxxxxc2 2 com/xx/xx/Test.js #编号2:冲突文件在当前分支中修改的副本
100644 ea51xxxxxxxxxxxc2 3 com/xx/xx/Test.js #编号3:冲突文件在合并版本中修改的副本
100644 2ieotxxxxxxxxxxxbd 0 com/xx/xx/Test2.js #编号0:表示该文件没有冲突
...

对于暂存区中冲突文件的三个副本,了解下即可。

工作区中的版本则包含了成功的合并和冲突的合并,这个是咱们要解决的,如:

....
<<<<<<< HEAD #当前更改
const { total, pageSize, pageNum, list } = dataSourceList.result
const dataSource = dataSourceList.result && dataSourceList.result.list
=======
const { total, pageSize, pageNum, list } = dataSourceList.result.payload || {}
const dataSource = dataSourceList.result && dataSourceList.result.payload && dataSourceList.result.payload.list
>>>>>>> 6c4a4c8d79a5d9a3829bc4d729d59fb250686382 #传入的更改
.....

然后将冲突的地方修改,如保存当前更改(根据实际操作):

....
const { total, pageSize, pageNum, list } = dataSourceList.result
const dataSource = dataSourceList.result && dataSourceList.result.list
.....

然后添加到暂存区,并提交

$ git add -u
$ git commit -m "Merge completed:xxx"

ps: git add -u 是(git add --update的缩写)会将文件的修改添加,有兴趣的可以百度下和git add . 以及git add -A的区别。

提交完可以看到,之前说过的./git下与合并相关的文件.git/MERGE_HEAD、.git/MERGE_MSG、.git/MERGE_MODE消失。

查看暂存区:git ls-files -s,会发现三个副本也被清除了(实际上 git add执行后就没了):

100644 ea51xxxxxxxxxxxc2 0         com/xx/xx/Test.js  #编号0:表示该文件没有冲突
100644 2ieotxxxxxxxxxxxbd 0 com/xx/xx/Test2.js #编号0:表示该文件没有冲突
...

三:总结

  1. git pull 冲突后可以使用git ls-files -s查看暂存区的三个冲突文件。(如果文件特别多可以再后面加“|grep xxx”)。
  2. 手动修改工作区中冲突文件的冲突内容。
  3. git add和 git commit
  4. 冲突解决,使用git push提交代码。(可以git pull下,这次没有冲突的提示了)
  5. 可以使用git ls-files -s查看暂存区的三个冲突文件消失

Git<一> 手工编辑冲突的更多相关文章

  1. git解决代码提交冲突

    树冲突文件名修改造成的冲突,称为树冲突.比如,A同事把文件改名为A.C,B同事把同一个文件改名为B.C,那么B同事将这两个commit合并时,会产生冲突.如果最终确定用B同事的文件名,那么解决办法如下 ...

  2. git手动解决内容冲突

    <span style="font-size:18px;">git checkout -b lab4 origin/lab4 git merge lab3</sp ...

  3. git提交时的冲突处理

    转自http://www.cnblogs.com/mengdd/p/3585038.html 当两条分支对同一个文件的同一个文本块进行了不同的修改,并试图合并时,Git不能自动合并的,称之为冲突(co ...

  4. git分支管理与冲突解决(转载)

    Git 分支管理和冲突解决 原文:http://www.cnblogs.com/mengdd/p/3585038.html 创建分支 git branch 没有参数,显示本地版本库中所有的本地分支名称 ...

  5. git 分之合并和冲突解决

    Git 分支管理和冲突解决 创建分支 git branch 没有参数,显示本地版本库中所有的本地分支名称. 当前检出分支的前面会有星号. git branch newname 在当前检出分支上新建分支 ...

  6. git 入门教程之冲突合并

    如果足够幸运的话,团队成员互不影响,彼此相安无事,大家各自基于 master 分支的某个 commit 创建自己的分支,平时在分支上独立工作,等到一段时间后再合并 merge 到 master 分支, ...

  7. git pull时的冲突解决方式; git stash; git fetch

    git fetch指令: https://www.yiibai.com/git/git_pull.html 发现远端有更新,git pull时,如果你本地分支修改了东西,导致git pull有冲突,失 ...

  8. git rebase解决合并冲突

    git rebase解决合并冲突   记录合并冲突解决方法,使用的git rebase,感觉很好用 1.git rebase 文档 https://git-scm.com/docs/git-rebas ...

  9. 【HOW】如何手工编辑InfoPath文件

    因为直接打开InfoPath的配置文件进行编辑会有些无从下手,所以下面以修改“节”的Margin为例来说明手工编辑InfoPath文件的过程. 1. 新建一个“节”,并在此节中创建一个数字类型字段“n ...

随机推荐

  1. OpenStack环境搭建

    实验环境 CentOS-7-x86_64-Minimal-1708.iso openstack_N.tar.gz 创建虚拟机 controller部署 computer网络配置 OpenStack环境 ...

  2. 《Python编程:从入门到实践》第五章 if语句 习题答案

    #5.1 major = 'Software Engineering' print("Is major =='Software Engineering'? I predict True.&q ...

  3. 天兔 -Lepus 慢查询分析平台配置

    想要实现慢查询查询分析,需要在被监控端安装percona-toolkit工具.   1.被监控端安装软件包 yum -y install perl-IO-Socket-SSL yum -y insta ...

  4. Python函数式编程-map/reduce

    1.map map()传入的第一个参数是f,即函数对象本身. map()函数接收两个参数,一个是函数,一个是Interable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterat ...

  5. CQOI2005 三角形面积并 和 POJ1177 Picture

    1845: [Cqoi2005] 三角形面积并 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 1664  Solved: 443[Submit][Stat ...

  6. 2018 南京网络预赛Sum - 离线分段打表

    题意 设 $f(n)$ 为 $n=ab$ 的方案数,其中 $a,b$ 为无平方因子数. 例如,$f(6)=4$,因为 $6 = 1 \times 6 = 2 \times 3 = 3 \times 2 ...

  7. E:nth-last-child(n)

    E:nth-last-child(n) 语法: E:nth-last-child(n) { sRules } 说明: 匹配父元素的倒数第n个子元素E,假设该子元素不是E,则选择符无效.大理石平台维修 ...

  8. https web service in Tibco & PC

    Error: 1.Certificate signature validation failed , Signature does not matchuse wrong public certific ...

  9. 万年历SQL Server中实现

    参照C#版万年历实现而做 http://www.cnblogs.com/txw1958/archive/2013/01/27/csharp-calendar.html 在sql server中实现公历 ...

  10. 系列属性(offset、scroll、client)

    一.offset系列属性 <div id="dv"></div> <!-- 已在style标签里设置div宽高各100px --> <sc ...