git pull --rebase PK git pull
在使用git的日常開(kāi)發(fā)過(guò)程中,經(jīng)常遇到如下情況:
1、某個(gè)時(shí)間你通過(guò)git clone/git fetch拉取了遠(yuǎn)程倉(cāng)庫(kù)代碼到本地倉(cāng)庫(kù)
2、開(kāi)始本地調(diào)試并開(kāi)發(fā)某個(gè)功能,經(jīng)過(guò)幾天的奮斗,終于功能調(diào)試好了
3、當(dāng)你開(kāi)心地準(zhǔn)備通過(guò)git push分享你的成果時(shí),遇到git push失敗,提示本地代碼非最新,需要先更新本地代碼
原來(lái)在你調(diào)試過(guò)程中,有人“偷偷地”提交了代碼,導(dǎo)致出現(xiàn)類似下面所示的情況:
說(shuō)明如下:
1、o/master為遠(yuǎn)程分支,master:本地跟蹤分支
2、c0、c1是從遠(yuǎn)程倉(cāng)庫(kù)取到本地的,故o/master指向c1
3、c2代表別人提交的代碼,c3是你準(zhǔn)備git push的本地提交
4、左邊實(shí)線圓圈是本地倉(cāng)庫(kù),右邊虛線圓圈是遠(yuǎn)程倉(cāng)庫(kù)
這時(shí)你是不是覺(jué)得一時(shí)無(wú)從下手呢?是否會(huì)抱怨別人不厚道?
別怕,git早就想到了,而且給出了兩種不同的解決方案呢^_^
第一種:git pull --rebase
git pull --rebase可能一時(shí)不容易理解,這里先賣個(gè)關(guān)子,先看下如下操作:
git fetchgit rebase o/master其中:
git fetch會(huì)基于c1,從遠(yuǎn)程倉(cāng)庫(kù)中拉取c2到本地,然后更新o/master指向c2
git rebase o/master, 這是一個(gè)變基操作,首先將master變基到o/master,這樣就會(huì)在o/master分支上多了一個(gè)c3'(c3的副本),再將master指向c3', 具體效果如下圖所示:
這樣再git push即可,且push之后遠(yuǎn)程倉(cāng)庫(kù)結(jié)果如下:
?第二種:git pull
git pull 一般不建議直接使用,因?yàn)樵撁钔鶗?huì)產(chǎn)生意想不到的后果,讓你后悔不已,我們盡量使用下面兩個(gè)命令來(lái)代替:
git fetchgit merge o/master其中:
git fetch效果同上
git merge o/master, 這是一個(gè)合并操作,與變基操作不同,git只會(huì)新創(chuàng)建一個(gè)節(jié)點(diǎn)c4,然后使c2和c3同時(shí)作為c4的父節(jié)點(diǎn),然后使master指向c4,具體效果如下:
這時(shí)再git push即可,但是push之后遠(yuǎn)程倉(cāng)庫(kù)結(jié)果如下:
?你是不是覺(jué)得很驚訝呢?很可能和你預(yù)想的效果不同吧?所以盡量使用git pull --rebase,這樣可以使遠(yuǎn)程倉(cāng)庫(kù)提交歷史更清爽。?
本文參考git闖關(guān)游戲:Learn Git Branching
總結(jié)
以上是生活随笔為你收集整理的git pull --rebase PK git pull的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DAVINCI DM3730开发攻略——
- 下一篇: VB控件数组之操作技巧