Git判断分支冲突原理

  1. 假定分支master建立以后,进行一些初始化的操做,提交了几回代码,最后一次commit是7df2b56d76e21474c3a0ff2f7b5244130b4d7fe7java

  2. 有两个员工A和B分别将clone至本地,A对master分支上的文件Main.java文件进行修改以后,提交了代码,提交的commit为9a072f1b2c0643a05f37db084eb6974a4dc6c7c8git

  3. 如今员工B修改了本地master分支的Main.java文件,可是没有提早从远端把最新的代码拉下来。此时员工B提交代码,commit为25d7ee36c72ce9c68b81f4125c760f38405930f1,此时若是员工B将远端master分支的代码拉下来将出现冲突,由于都对Main.java文件进行了修改。code

那么git是如何判断员工B的代码和远端的代码冲突的呢?
  首先git须要找到两个分支的ancestor commit,在当前状况下,ancestor commit为两个分支的分开的岔路口(即7df2b56d76e21474c3a0ff2f7b5244130b4d7fe7)。 it

  其次记录两天分支至ancestor commit以后的修改记录(文本文件记录起始行号和修改范围)。 ast

  最后生成合并结果,有三种状况:
  1, 只有一条分支进行了修改,此时判断没有发生冲突;
  2, 两条分支都进行了修改,可是修改记录没有发生重叠,则没有发生冲突;
  3,两条分支都进行了修改,而且修改记录发生了重叠,则发生了冲突。db


冲突记录方式:文件

<<<<<<< HEAD
3
=======
2
>>>>>>> branch1

  <<<<<<<与=======之间是咱们本地分支的修改,而=======与>>>>>>>是所拉取的分支的修改。co

相关文章
相关标签/搜索