這個問題我一直沒想明白,而且感覺不太好描述,所以一直沒問。
例如存在項目A,項目B,兩者毫不相干。
專案A,B都有遠端倉庫和本地倉庫,分別用remoA,locA,remoB,locB表示。
問題:
正常情況下,肯定是locA關聯到remoA,locB關聯到remoB,不管這種關聯是透過克隆還是 git remote add (remote) (repoUrl)。現在假設本地庫locA,locB都已經存在,但locB處於剛剛初始化的狀態,還是一個空庫,因為操作錯誤,執行了
git remote add origin (remoAUrl)。
之後發現了這個錯誤,又執行了
git remote add originB (remoBUrl)
那麼此時remoA/master和remoB/master是否都對應到了locB/master上?
如果執行git pull 會使得remoA和remoB的遠端分支程式碼在本地的master分支上發生合併嗎 ?
phpcn_u15822017-06-29 10:10:59
因為操作錯誤,執行了
git remote add origin (remoAUrl)
。之後發現了這個錯誤,又執行了git remote add originB (remoBUrl)
如果你不打算把 remoA
關聯給 locB
,那麼到這裡就還是錯的。正確做法應該是 git remote rm origin
然後 git remote add origin (remoBUrl)
那麼此時remoA/master和remoB/master是否都映射到了locB/master上?
當然不。首先我覺得說建立了"關聯"的關係可能更恰當,類似於 git checkout -b --track xxx
這種感覺。其次,你加了兩個 remote
,其中一個叫 origin
,另一個叫 originB
。但 git
會優先使用 origin
。詳見下一條
如果執行git pull 會使得remoA和remoB的遠端分支程式碼在本地的master分支上發生合併嗎
當然不。除非你先把本地更新成其中一個 branch,然後去 pull
另一個 branch。
git pull
不指定後續參數,預設就是 git pull origin
。如果你在 master
branch 上,預設也就是 git pull origin master
。
當然,取決於你的設定,有可能會改變。以上提到的只是預設情況。實際情況請開啟 .git/config
檔案看一看。命令列輸入 cat .git/config
即可。比如這樣:
[branch "master"]
remote = origin
merge = refs/heads/master
這就告訴了 git
兩件事兒:
如果你現在在 master
branch 上,那麼預設的 remote
是 origin
如果你在這個情況下執行 git pull
,不帶任何參數的那種,那麼就相當於 git pull origin master
你可以用 git push -u newOrigin newBranch
來改,那現在 git pull
就相當於 git pull newOrigin newBranch
了。
類似地,也可以 git config branch.master.remote newOrigin
然後 git config branch.master.merge refs/heads/newBranch
。結果一樣。