Git 冲突解决

扫码查看

第一种观点


情景,aa/a.txt中的,bb=1


git status



修改本地的aa/a.txt中的,bb=3


在服务器也修改了aa/a.txt,bb=2



 


提交本地的代码到远程仓库


在服务器执行git pull



 


此时,发生代码冲突


1 如果希望保存本地改动并拉下最新服务器代码,手动merge


(1)要保留服务器上的修改



1
git stash



git stash list将当前的Git栈信息打印出来



1
git stash list



stash@{0}就是刚才保存的标记


(2)暂存了本地修改之后,pull内容



1
git pull



(3)还原暂存的内容



1
git stash pop stash@{0}



系统自动合并修改的内容,但是其中有冲突,需要解决其中的冲突


(4)解决文件中冲突的的部分


打开冲突的文件



Updated upstream 和=====之间的内容就是pull下来的内容


====和stashed changes之间的内容就是本地修改的内容


这种情况,git也不知道哪行内容是需要的,所以要自行确定需要的内容


直接编辑冲突了的文件(test.txt),把冲突标记删掉,把冲突解决正确


eg:


  保留bb=2


保存退出


(5) 删除stash



1
git stash drop stash@{0}


清除0编号的stash


清除所有stash



1
git  stash clear




(6)提交aa/a.txt的修改



1
git add aa/a.txt




修改本地的其他文件,并提交到远程仓库


服务器上拉取代码



 


将本地的a.txt,bb=5,提交代码,更新到远程仓库



 


按照(1)-(6)步骤处理冲突


2. 如果希望服务器上版本完全覆盖本地修改,使用如下命令回退并更新 



1
2
git reset --hard
git pull


  


  


  


 


  


  


第二个观点


1、git冲突的场景



  • 情景一:多个分支代码合并到一个分支时;

  • 情景二:多个分支向同一个远端分支推送代码时;


实际上,push操作即是将本地代码merge到远端库分支上。


关于push和pull其实就分别是用本地分支合并到远程分支 和 将远程分支合并到本地分支


所以这两个过程中也可能存在冲突。

 

git的合并中产生冲突的具体情况:
  <1>两个分支中修改了同一个文件(不管什么地方)
  <2>两个分支中修改了同一个文件的名称
两个分支中分别修改了不同文件中的部分,不会产生冲突,可以直接将两部分合并。

2、冲突解决方法



  • 情景一:在当前分支上,直接修改冲突代码--->add--->commit。

  • 情景二:在本地当前分支上,修改冲突代码--->add--->commit--->push


 注:借用vim或者IDE或者直接找到冲突文件,修改。


 


3、实战演示


(1)情景


  本地库中两个不同分支,修改同一个文件同一代码块,两分支先后将修改合并到master分支上,master在合并第二个分支代码时,报错:合并冲突。


 


(2)本地库


<1>master分支




<2>建立两个分支



<3>两分支修改提交


aBranch分支:






bBranch分支:





 


(3)合并分支产生冲突


合并aBranch分支(将aBranch分支合并到当前master分支上):




注:
git merge:默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支。
使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,建议采用这种方法。


再合并bBranch分支,产生冲突:



mergeTest.txt 文件内容:



 


(4)解决冲突


--->在当前分支上(master),找到冲突文件,直接修改冲突代码,add,commit。



 注:简单方法,使用vim修改,cat查看冲突文件。(注意要删除git自动生成的冲突代码分隔符)


(5)完成冲突解决



注:提交或者合并都会生成git节点。每个节点对应一个代码版本。


 


12-26 05:42
查看更多