前言:最近遇到一個(gè)坑,我居然之前都沒(méi)遇到過(guò),還是自己開(kāi)發(fā)太少了,git 用的太少了
背景
現(xiàn)在有兩個(gè)遠(yuǎn)程倉(cāng)庫(kù):
- upstream:一個(gè)多人協(xié)作的遠(yuǎn)程倉(cāng)庫(kù),自己沒(méi)有 push 的權(quán)限。
- origin:自己的遠(yuǎn)程倉(cāng)庫(kù),自己有 push 權(quán)限,每次修改代碼以后先 push origin,然后再給 upstream 提 PR。
現(xiàn)在有四個(gè)分支:
(:
前是分支的名字)
- branch1:upstream 的 branch1
- branch2:upstream 的 branch2
- branch1:origin 的 branch1
- branch2:origin 的 branch2
現(xiàn)在我要在 Branch1 上做開(kāi)發(fā)。
正確的流程
每次我要向自己的 origin branch1 代碼倉(cāng)庫(kù) push 的正確流程應(yīng)該是:
(:
前面是操作,后面是解釋。...
表示一系列的操作 )
- git add:add 這次修改
- git commit:提交這次修改
- git pull --rebase upstream branch1:從 upstream 拉取別人最新的代碼,rebase 到當(dāng)前分支上
- ...:解決 rebase 的沖突
- git push --set-upstream origin:提交代碼到 origin
這個(gè)流程沒(méi)什么問(wèn)題。當(dāng)我們想切換到一個(gè)新的分支以后,并從 upstream 拉取代碼的時(shí)候,使用 pull 就有大問(wèn)題。
使用 Pull 的大問(wèn)題
當(dāng)我們?cè)?branch1 選擇使用 pull 命令拉取 branch2 的時(shí)候,就有大問(wèn)題!哪怕你是這么寫(xiě)的:
git pull upstream branch2:branch2
確實(shí)這樣會(huì)在本地創(chuàng)建一個(gè)新的分支 branch2
但是這個(gè)命令會(huì)自動(dòng)把 branch1 和 branch2 合并。導(dǎo)致你的終端出現(xiàn)一堆 git 的問(wèn)題。然后你明明覺(jué)得:我不就是 pull 了一個(gè)分支嘛?怎么這么多問(wèn)題。
因?yàn)?git pull 本質(zhì)就是 fetch + merge。而且是和當(dāng)前分支 merge。而我們只想使用 fetch 的功能。
所以想清楚如果只是拉代碼而沒(méi)有合并,一定只用 fetch!
所以應(yīng)該寫(xiě)成:
git fetch upstream branch2:branch2
這樣就不會(huì)和 branch1 合并了。