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

相關文章
相關標籤/搜索