Git<一> 手工编辑冲突
一:背景
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:表示该文件没有冲突
- ...
三:总结
- git pull 冲突后可以使用git ls-files -s查看暂存区的三个冲突文件。(如果文件特别多可以再后面加“|grep xxx”)。
- 手动修改工作区中冲突文件的冲突内容。
- git add和 git commit
- 冲突解决,使用git push提交代码。(可以git pull下,这次没有冲突的提示了)
- 可以使用git ls-files -s查看暂存区的三个冲突文件消失
Git<一> 手工编辑冲突的更多相关文章
- git解决代码提交冲突
树冲突文件名修改造成的冲突,称为树冲突.比如,A同事把文件改名为A.C,B同事把同一个文件改名为B.C,那么B同事将这两个commit合并时,会产生冲突.如果最终确定用B同事的文件名,那么解决办法如下 ...
- git手动解决内容冲突
<span style="font-size:18px;">git checkout -b lab4 origin/lab4 git merge lab3</sp ...
- git提交时的冲突处理
转自http://www.cnblogs.com/mengdd/p/3585038.html 当两条分支对同一个文件的同一个文本块进行了不同的修改,并试图合并时,Git不能自动合并的,称之为冲突(co ...
- git分支管理与冲突解决(转载)
Git 分支管理和冲突解决 原文:http://www.cnblogs.com/mengdd/p/3585038.html 创建分支 git branch 没有参数,显示本地版本库中所有的本地分支名称 ...
- git 分之合并和冲突解决
Git 分支管理和冲突解决 创建分支 git branch 没有参数,显示本地版本库中所有的本地分支名称. 当前检出分支的前面会有星号. git branch newname 在当前检出分支上新建分支 ...
- git 入门教程之冲突合并
如果足够幸运的话,团队成员互不影响,彼此相安无事,大家各自基于 master 分支的某个 commit 创建自己的分支,平时在分支上独立工作,等到一段时间后再合并 merge 到 master 分支, ...
- git pull时的冲突解决方式; git stash; git fetch
git fetch指令: https://www.yiibai.com/git/git_pull.html 发现远端有更新,git pull时,如果你本地分支修改了东西,导致git pull有冲突,失 ...
- git rebase解决合并冲突
git rebase解决合并冲突 记录合并冲突解决方法,使用的git rebase,感觉很好用 1.git rebase 文档 https://git-scm.com/docs/git-rebas ...
- 【HOW】如何手工编辑InfoPath文件
因为直接打开InfoPath的配置文件进行编辑会有些无从下手,所以下面以修改“节”的Margin为例来说明手工编辑InfoPath文件的过程. 1. 新建一个“节”,并在此节中创建一个数字类型字段“n ...
随机推荐
- C++——流类库和输入/输出
前言 数据是怎么写道磁盘的? 代码里面我们一个读写调用似乎就能将数据从磁盘读写.仿佛代码是直接和磁盘打交道.以我们最常见的笔记本.或台式机的磁盘SATA盘为例,其受南桥上ATA控制器支配,这里面传输的 ...
- Linux学习笔记之二
vim编辑器 :三种工作模式 vim /tmp/xueying.txt 命令模式 a.i.o/esc \ :wq 保存并退出 / \ 输入模式 ...
- Windows——Thinkpad 开机显示pwmtr64v.dll找不到指定的模块
解决方法:进入设备管理器,展开系统设备分页,找到Lenovo Power Manager ,右键,更新驱动程序,浏览计算机上的驱动程序, 让我从计算机上的可用驱动程序列表中选取,选择Lenovo Po ...
- Spring Boot 2发送邮件手把手图文教程
原文:http://www.itmuch.com/spring-boot/send-email/ 本文基于:Spring Boot 2.1.3,理论支持Spring Boot 2.x所有版本. 最近有 ...
- flask中使用ajax 处理前端请求,每隔一段时间请求一次
需求: flask中使用ajax 处理前端请求,每隔一段时间请求一次,并展示在页面 使用 setInterval(function(){},1000)方法 结果展示: html:(test.html) ...
- vb开发最全教程
https://www.xin3721.com/eschool/VisualBasicenet/
- 图片下载---使用gevent爬数据
代码: import urllib.request import gevent from gevent import monkey monkey.patch_all() def downloader( ...
- Linux - 网络配置( CentOS 64 )
终于..今天我终于将linux的网络调试出来了,虽然之前看了一大堆教程,每一个都是一样的步骤,但是,在我这就是弄不好,所以经过不断尝试的我,今天发一个自己配置好的步骤,唉,太痛苦了. - 对了补充一句 ...
- sql server 常见约束
1.not null 非空约束 ①强制列不接受空值 ②例:创建表时,name varchar(6) not null, 2.unique 唯一性约束 ①约束唯一标识数据库表中的每条记录 ②unique ...
- oracle 备份恢复之recover database的四条语句区别
1 recover database using backup controlfile2 recover database until cancel3 recover database usin ...