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
->1e7bd1af
然後在push的時候就是失敗,因為衝突了。官方建議(也是解決辦法)是:
1.git pull(拉取遠端程式碼,pull 就是 fetch + merge)
2.然後自己修改衝突的檔案 (這一步你會看到衝突的檔案是怎樣的,你甚至可以不修改衝突檔案的,但邏輯上我們肯定要修改)
3.commit (在這一步git會認為你已經解決好衝突了)
4.push
就會成功。
失敗的示例:
mygit02修改衝突後,檢視commit鏈,發現變成了:58f544 ->
1e7bd1af -> 13e5f48 (
13e5f48是我們解決衝突時的commit節點,也就是解決衝突的第三步生成的commit節點
)
所以git 解決衝突的邏輯是:把遠端的commit鏈放在前面,自己的commit鏈放在後面,使之合成一條鏈來解決。
衝突的本質是兩個倉庫處於不同的commit鏈,因為無法確定要以那條鏈為基準,所以無法合併。