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