Git-06-本地与远程冲突

git会在本地维护 origin/master分支,通过该分支 感知远程github的内容

origin/master一般建议 不要修改,是一个只读分支

我们可以用一个命令去感知本地仓库与远程仓库的差距(是否落后或先进):git remote show origin

 

 

 up to date表示本地仓库master分支与远程仓库保持一致。

 

 

本地与远程冲突

假如有2个本地仓库,一个是mygit01  , 另一个是mygit02,它们关联的是同一个远程仓库。

刚开始时,它们的commit链的最新节点都是 58f5448

然后mygit01修改了a.txt文件,提交然后push到远程。

此时mygit01和远程仓库的commit链都是 58f5448 -> 241644f

然后mygit02也修改了a.txt文件,然后commit。

此时mygit02的commit链是 58f5448 -> 1e7bdlaf

然后在push的时候就是失败,因为冲突了。官方建议(也是解决办法)是:

1.git pull(拉取远程代码,pull 就是 fetch + merge)

2.然后自己修改冲突的文件 (这一步你会看到冲突的文件是怎样的,你甚至可以不修改冲突文件的,但逻辑上我们肯定要修改)

3.commit (在这一步git会认为你已经解决好冲突了)

4.push

就会成功。

 

失败的示例:

 

mygit02修改冲突后,查看commit链,发现变成了 58f544 -> 241644f -> le7bdlaf -> 13e5f48 (13e5f48是我们解决冲突时的commit节点,也就是解决冲突的第三步生成的commit节点

所以git 解决冲突的逻辑是:把远程的commit链放在前面,自己的commit链放在后面,使之合成一条链来解决。

 

冲突的本质是两个仓库处于不同的commit链,因为无法确定要以那条链为基准,所以无法合并。

 

posted @ 2021-09-05 13:07  KenLoong  阅读(274)  评论(0编辑  收藏  举报