Git 冲突分类及解决办法

一、为什么会产生冲突?

由于在多用户的协同工作的情况下,多用户可能对同一个文件进行修改不一致出现。一般情况下,Git能够自动对修改进行合并,但是有一些特殊情况下需要用户进行手动合并。

二、Git自动合并的情况

1、多个成员修改不同的文件
2、多个成员修改相同文件不同区域
3、同时修改文件名和文件内容

以上三种情况可以用同一种方式解决:在执行push之前先进行pull 操作

git pull 

该命令等于两条指令

git  fetch
git merge refs/remotes/origin/master

三、用户手动合并

1、文件合并(修改了同一文件的同一区域)

例,用户1 和用户2 同时git clone 了文件1,并且都修改了文件的第一行。
第一步,用户1 进行一下操作

git add .
git commit -m "用户1修改了文件第一行"
git push

接着,用户2 ,执行以下操作

git add .
git commit -m "用户2修改了文件第一行"
git push

报错: 在log信息中提示使用

git pull

提示 自动merge失败 ,需要修复conflict 后才能commit。现在Git已经不能执行自动合并,此时需要用户手动合并解决问题。
查看本地版本库状态,发现 有一个冲突发生。

解决冲突方法

借助 mergetool工具

git mergetool

得到kdiff3 图形界面 ,其中
A区为修改前,B区为本地版本库,C区为远程版本库,选择需要使用的版本库,打开文件后会发现,代码中会被<<<<<<< 、=、>>>>>>>包围,这是冲突标记:冲突标记<<<<<<< 与=之间的内容是我的修改,=======与>>>>>>>之间的内容是别人的修改。
修改完文件后将文件git add添加到暂存区修改后保存退出即可。这里就完成了conflict 冲突的手动合并。

2、树合并(不同成员对同一文件重命名)

第一种解决方法,通过mergetool 修复冲突

第二种解决方法,直接通过git rm删除文件,使用git add 将需要的文件添加到暂存区 最后commit

四、多人合并开发提交代码执行顺序

提交项目顺序commit → pull → push。

这个先 commit 再 pull 再 push 的情况就是为了应对多人合并开发的情况:

1、commit 是为了告诉 git 我这次提交改了哪些东西,不然你只是改了但是 git 不知道你改了,也就无从判断比较;

2、pull是为了本地 commit 和远程commit 的对比记录,git 是按照文件的行数操作进行对比的,如果同时操作了某文件的同一行那么就会产生冲突,git 也会把这个冲突给标记出来,这个时候就需要先把和你冲突的那个人拉过来问问保留谁的代码,然后在 git add && git commit && git pull 这三连,再次 pull 一次是为了防止再你们协商的时候另一个人给又提交了一版东西,如果真发生了那流程重复一遍,通常没有冲突的时候就直接给你合并了,不会把你的代码给覆盖掉

3、出现代码覆盖或者丢失的情况:比如A B两人的代码pull 时候的版本都是1,A在本地提交了2,3并且推送到远程了,B 进行修改的时候没有commit 操作,他先自己写了东西,然后 git pull 这个时候 B 本地版本已经到3了,B 在本地版本3的时候改了 A 写过的代码,再进行了git commit && git push 那么在远程版本中就是4,而且 A 的代码被覆盖了,所以说所有人都要先 commit 再 pull,不然真的会覆盖代码的

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值