1. 程式人生 > 其它 >Git-06-本地與遠端衝突

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 ->

241644f ->1e7bd1af -> 13e5f48 (13e5f48是我們解決衝突時的commit節點,也就是解決衝突的第三步生成的commit節點

所以git 解決衝突的邏輯是:把遠端的commit鏈放在前面,自己的commit鏈放在後面,使之合成一條鏈來解決。

衝突的本質是兩個倉庫處於不同的commit鏈,因為無法確定要以那條鏈為基準,所以無法合併。