git remote add (remote) (repoUrl)用於不相關的兩個庫
伊谢尔伦
伊谢尔伦 2017-06-29 10:08:59
0
1
1162

這個問題我一直沒想明白,而且感覺不太好描述,所以一直沒問。
例如存在項目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分支上發生合併嗎 ?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(1)
phpcn_u1582

因為操作錯誤,執行了 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 兩件事兒:

  1. 如果你現在在 master branch 上,那麼預設的 remoteorigin

  2. 如果你在這個情況下執行 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。結果一樣。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板