剖析---使用git pull、git push解决代码冲突的本质

2,730 阅读4分钟

冲突

冲突是我们在团队合作中最容易碰到的。可能你看很多文章就是先让你git pull,然后git push。所以,你一运行,发现可以解决了。但是你有思考过这些冲突都包括什么吗?

其他教程请看这里

白话git

所有冲突的前提:甲和你自己两个人同时拉取了一版git仓库的代码,然后分别进行开发。

冲突一:两个人修改了不同文件

在团队开发过程中这个也是最常见的。比如团队中有甲和你自己两个人。

甲:修改了A.txt的代码,git push提交代码,没有任何问题;

你自己:修改了B.txt的代码,git push提交代码,duang~ ,报错了。

解决方案:

  1. 先使用git pull,拉取一下代码,更新一下甲修改的文件;
  2. 在使用git push提交自己修改的文件;

冲突二:两个人修改了同一文件的不同代码

甲:修改了A.txt文件的第20-30行的代码,git push提交代码,没有任何问题;

你自己:修改了A.txt代码的第50-60行的代码,git push提交代码,没错!duang~ duang~,又报错了。

解决方案:

解决方案也是一样的

  1. 先使用git pull,拉取一下代码,更新一下甲修改的文件;
  2. 在使用git push提交自己修改的文件;

冲突三:两个人修改了同一文件的同一代码

甲:修改了A.txt文件的第20-30行的代码,git push提交代码,没有任何问题;

你自己:修改了A.txt代码的第20-60行的代码,git push提交代码,没错!duang~ duangduang,又又报错了。

这是为什么呢?

因为你们两个人都修改了同一个文件的同一代码,git不知道该使用你们两个谁的修改的代码了,需要你们手动解决一下。这是唯一一个需要手动解决的冲突,因为git不知到该采用你们两个谁的

解决方案:

  1. 先使用git pull,拉取一下代码,更新一下甲修改的文件;

  2. 在使用git push提交自己修改的文件,报错肯定是在你执行git push操作的时候出现的。

  3. 这个就需要你和甲来商量了,到底是使用甲修改的代码,还是你修改的代码。这个一定是需要经过商量的。不商量直接改成自己的你怕是会被打!

  4. 商量好了用谁的代码了。我们就需要手动修改了:

    • <<<<<<<HEAD和=======之间的是你同事就是甲修改的代码;
    • =======和>>>>>>> f541ce9470ebfe6be304102c295546151e36b72a之间的是你修改的代码。
    <<<<<<< HEAD
       <div>甲同事修改的代码</div>
    =======
       <div>你修改的代码</div>
    >>>>>>> f541ce9470ebfe6be304102c295546151e36b72a
    
    • 比如商量好用甲同事的代码了那么代码就变成了。

      <div>甲同事修改的代码</div>
      
    • 商量好用你的代码,就变成了

      <div>你修改的代码</div>
      
    • 无论哪种都需要手动删除<<<<<<<>>>>>>>=======之间的代码。包括这些符号,因为前端代码是不认识这些符号的。

      • 解决好之后,正常操作即可:git add -->git commit -m 'fix:解决代码冲突'-->git push

冲突四:甲修改了文件名称,你还在原来的文件名字上面修改代码

甲:将A.txt的文件名称修改成了B.txt,git push提交代码,没有任何问题;

你自己:但是你这里的本地代码还是A.txt,你还在文件名称是A.txt的文件里面写代码呢,git push提交代码,duangduangduang~,报错了。

那么你可能会疑问,既然甲改了文件名字,我还在A.txt文件上面操作,我写的代码怎么办?还是在A.txt里面还是怎样?

解决方案:

  1. 先使用git pull,拉取一下代码,更新一下甲更改的名称B.txt;这一步git自动将你修改的A.txt的代码,更新到了B.txt文件里面。这个操作时git自己完成的,这也是git强大的一点。
  2. 再使用git push提交自己修改的文件;

综上

现在终于明白了为什么使用git pullgit push就可以解决大部分代码冲突了吧。

除了多个人修改同一行代码的问题都可以先pull 再push。那么有人会问了,什么时候才能判断是不是修改的同一行代码出现的问题呢?

  • 当你先pull后push 之后发现问题怎么也解决不了的时候肯能就是这个问题;
  • 或者你也可以使用vscode编辑器看一下,这个是查看代码修改最方便的一款编辑器了