切換語言為:簡體
git pull 與 git fetch

git pull 與 git fetch

  • 爱糖宝
  • 2024-09-18
  • 2040
  • 0
  • 0

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

git pull 與 git fetch

vim出現場景

當git config --global pull.rebase為空--預設merge時:我當前拉取的遠端版本為 B,此時修改了程式碼,並在本地倉庫commit一次,但並未 push 到遠端倉庫。  另一位開發者在 B 的基礎上,同樣 commit 了一次並 push 到遠端倉庫。那麼這個時候,我再 push 自己的程式碼就會發生錯誤。此時pull就會出現vim

git pull 與 git fetch

git pull 與 git fetch

git config --global pull.rebase true設定為預設變基之後:提示變基成功,且不會出現多餘merge

git pull 與 git fetch

使用:git fetch,git rebase origin/main:(這個效果是和git pull的rebase效果一致的)

git pull 與 git fetch

再提交:

git pull 與 git fetch

注意

如果你發現自己跑出來的結果和我不一致,注意檢視你當前git的rebase情況,當前git可能和global全域性不一樣

git pull 與 git fetch

結論

想要不出現vim編輯,出現多餘的merge資訊可以採用:

  • 使用git fetch git rebase origin/主分支,再正常的add提交程式碼

  • 使用git config pull.rebase true開啟rebase,再git pull,再正常的add提交程式碼

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.