3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
而不是使用-f或--force開(kāi)發(fā)人員應(yīng)該使用
--force-with-lease
為什么?因?yàn)樗鼨z查遠(yuǎn)程分支的更改,這絕對(duì)是個(gè)好主意。讓我們想象一下,詹姆斯和麗莎正在研究同一個(gè)功能分支,麗莎已經(jīng)推動(dòng)了提交。詹姆斯現(xiàn)在重新調(diào)整他的當(dāng)?shù)胤种?,并在試圖推動(dòng)時(shí)被拒絕。當(dāng)然,詹姆斯認(rèn)為這是因?yàn)楦淖儾⑹褂?-force并且會(huì)改寫(xiě)所有Lisa的變化。如果詹姆斯曾經(jīng)使用過(guò)--force-with-lease,那么他會(huì)收到一個(gè)警告,告知其他人已做過(guò)提交。我不明白為什么有人會(huì)在推銷(xiāo)一個(gè)rebase之后使用--force而不是--force-with-lease。

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
對(duì)此的一個(gè)解決方案是執(zhí)行msysGit的rebasing合并腳本所做的事情- 在rebase之后,在舊的head中feature合并-s ours。你最終得到了提交圖:
A--B--C------F--G (master)
\ \
\ D'--E' (feature)
\ /
\ --
\ /
D--E (old-feature)
...而你的推動(dòng)feature將是一個(gè)快速前進(jìn)。
換句話說(shuō),你可以這樣做:
git checkout feature
git branch old-feature
git rebase master
git merge -s ours old-feature
git push origin feature
(未經(jīng)測(cè)試,但我認(rèn)為這是正確的......)

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
問(wèn)題是git push假設(shè)遠(yuǎn)程分支可以快速轉(zhuǎn)發(fā)到本地分支,即本地和遠(yuǎn)程分支之間的所有區(qū)別在本地有一些新的提交,如下所示:
Z--X--R <- origin/some-branch (can be fast-forwarded to Y commit)
\
T--Y <- some-branch
執(zhí)行g(shù)it rebase提交時(shí),D和E將應(yīng)用于新基礎(chǔ),并創(chuàng)建新的提交。這意味著在rebase之后你會(huì)有類(lèi)似的東西:
A--B--C------F--G--D'--E' <- feature-branch
\
D--E <- origin/feature-branch
在那種情況下,遠(yuǎn)程分支無(wú)法快速轉(zhuǎn)發(fā)到本地。雖然,理論上本地分支可以合并到遠(yuǎn)程(顯然你在這種情況下你不需要它),但是git push只執(zhí)行快進(jìn)合并它會(huì)引發(fā)錯(cuò)誤。
什么--force選項(xiàng)只是忽略遠(yuǎn)程分支的狀態(tài)并將其設(shè)置為您正在推送它的提交。所以git push --force origin feature-branch簡(jiǎn)單地origin/feature-branch用本地覆蓋feature-branch。
在我看來(lái),master只要您是唯一一個(gè)在該分支上工作的人,就可以將功能分支和強(qiáng)制推送回遠(yuǎn)程存儲(chǔ)庫(kù)。
- 3 回答
- 0 關(guān)注
- 1273 瀏覽
添加回答
舉報(bào)