git pull和git fetch
首先我們直接丟擲面試回答(疑惑的同學可以先看完再回來看結論):
兩個的本質其實都是想同步遠端最新程式碼,最開始其實我用的都是pull,方便嘛,但是在又一次pull發現會出現vim的編輯介面,後面去嘗試了,當我修改了a分支,準備提交,而且a分支也被其他人修改的同時,就會出現vim這個編輯介面。然後查了資料,發現這其中其實還牽扯到一個rebase的問題,提交時使用fetch同步之後進行git rebase操作,再push程式碼,是不會出現merge資訊的。而使用pull就會多出一條merge資訊(merge main of 分支),因為在pull預設引數是merge下,其實pull=fetch+merge。當然對於其實習慣用pull操作來說,也可以設定rebase,就可以實現rebase,他預設是merge。
什麼是rebase
變基rebase
rebase稱為變基,字面就是改變基底的意思,比如當我從master的commit3時切出分支a,同時有其他同學提交了程式碼,更新到了commit5,使用rebase就能讓a分支從基於commit3到基於最新的commit5
vim出現場景
當git config --global pull.rebase為空--預設merge時
:我當前拉取的遠端版本為 B,此時修改了程式碼,並在本地倉庫commit一次,但並未 push 到遠端倉庫。 另一位開發者在 B 的基礎上,同樣 commit 了一次並 push 到遠端倉庫。那麼這個時候,我再 push 自己的程式碼就會發生錯誤。此時pull就會出現vim
git config --global pull.rebase true設定為預設變基之後
:提示變基成功,且不會出現多餘merge
使用:git fetch,git rebase origin/main
:(這個效果是和git pull的rebase效果一致的)
再提交:
注意
如果你發現自己跑出來的結果和我不一致,注意檢視你當前git的rebase情況,當前git可能和global全域性不一樣
結論
想要不出現vim編輯,出現多餘的merge資訊可以採用:
使用
git fetch
git rebase origin/主分支
,再正常的add提交程式碼使用
git config pull.rebase true
開啟rebase,再git pull
,再正常的add提交程式碼