這個(gè)問(wèn)題我一直沒(méi)想明白,而且感覺(jué)不太好描述,所以一直沒(méi)問(wèn)。
比如存在項(xiàng)目A,項(xiàng)目B,兩者毫不相干。
項(xiàng)目A,B都有遠(yuǎn)程倉(cāng)庫(kù)和本地倉(cāng)庫(kù),分別用remoA,locA,remoB,locB表示。
問(wèn)題:
正常情況下,肯定是locA關(guān)聯(lián)到remoA,locB關(guān)聯(lián)到remoB,不管這種關(guān)聯(lián)是通過(guò)克隆還是 git remote add (remote) (repoUrl)?,F(xiàn)在假設(shè)本地庫(kù)locA,locB都已經(jīng)存在,但locB處于剛剛初始化的狀態(tài),還是一個(gè)空庫(kù),因?yàn)椴僮麇e(cuò)誤,執(zhí)行了
git remote add origin (remoAUrl)。
之后發(fā)現(xiàn)了這個(gè)錯(cuò)誤,又執(zhí)行了
git remote add originB (remoBUrl)
那么此時(shí)remoA/master和remoB/master是否都映射到了locB/master上?
如果執(zhí)行g(shù)it pull 會(huì)使得remoA和remoB的遠(yuǎn)程分支代碼在本地的master分支上發(fā)生合并嗎 ?
小伙看你根骨奇佳,潛力無(wú)限,來(lái)學(xué)PHP伐。
因?yàn)椴僮麇e(cuò)誤,執(zhí)行了
git remote add origin (remoAUrl)
。之后發(fā)現(xiàn)了這個(gè)錯(cuò)誤,又執(zhí)行了git remote add originB (remoBUrl)
如果你不打算把 remoA
關(guān)聯(lián)給 locB
,那么到這里就還是錯(cuò)的。正確做法應(yīng)該是 git remote rm origin
然后 git remote add origin (remoBUrl)
那么此時(shí)remoA/master和remoB/master是否都映射到了locB/master上?
當(dāng)然不。首先我覺(jué)得說(shuō)建立了"關(guān)聯(lián)"的關(guān)系可能更恰當(dāng),類(lèi)似于 git checkout -b --track xxx
這種感覺(jué)。其次,你添加了兩個(gè) remote
,其中一個(gè)叫 origin
,另一個(gè)叫 originB
。但 git
會(huì)優(yōu)先使用 origin
。詳見(jiàn)下一條
如果執(zhí)行g(shù)it pull 會(huì)使得remoA和remoB的遠(yuǎn)程分支代碼在本地的master分支上發(fā)生合并嗎
當(dāng)然不。除非你先把本地更新成其中一個(gè) branch,然后去 pull
另一個(gè) branch。
git pull
不指定后續(xù)參數(shù),默認(rèn)就是 git pull origin
。如果你在 master
branch 上,默認(rèn)也就是 git pull origin master
。
當(dāng)然,取決于你的設(shè)定,有可能會(huì)發(fā)生變化。以上提到的只是默認(rèn)情況。實(shí)際情況請(qǐng)打開(kāi) .git/config
文件看一看。命令行里輸入 cat .git/config
即可。比如這樣:
[branch "master"]
remote = origin
merge = refs/heads/master
這就告訴了 git
兩件事兒:
如果你現(xiàn)在在 master
branch 上,那么默認(rèn)的 remote
是 origin
如果你在這個(gè)情況下執(zhí)行 git pull
,不帶任何參數(shù)的那種,那么就相當(dāng)于 git pull origin master
你可以用 git push -u newOrigin newBranch
來(lái)改,那現(xiàn)在 git pull
就相當(dāng)于 git pull newOrigin newBranch
了。
類(lèi)似地,也可以 git config branch.master.remote newOrigin
然后 git config branch.master.merge refs/heads/newBranch
。結(jié)果一樣。