GIT使用記錄 - git pull 和 git pull --rebase 的區(qū)別

命令使用場景

多人在同一分支進行開發(fā)

場景模擬

git pull
  1. 假設(shè)有兩個開發(fā)人員在名為“zhangdong”的分支上進行開發(fā)且代碼已同步
  2. 開發(fā)1修改代碼并add、commit(commit名為“第二次提交”)、push代碼到“zhangdong”分支
  3. 開發(fā)2 修改代碼并add、commit(commit名為“u”)、push代碼到“zhangdong”分支,會得到失敗提示,需要拉取遠(yuǎn)程最新代碼
  4. 開發(fā)2運行“git pull”命令,假設(shè)沒有文件沖突的情況下,會有需要進行merge的提示
  5. 開發(fā)2進行Merge操作,代碼會合并同步,這時通過命令“git log --graph --decorate --oneline --all”看下分支圖譜:


    git pull
git pull --rebase
  1. 假設(shè)有兩個開發(fā)人員在名為“zhangdong”的分支上進行開發(fā)且代碼已同步
  2. 開發(fā)1修改代碼并add、commit(commit名為“第三次提交”)、push代碼到“zhangdong”分支
  3. 開發(fā)2 修改代碼并add、commit(commit名為“u”)、push代碼到“zhangdong”分支,會得到失敗提示,需要拉取遠(yuǎn)程最新代碼
  4. 開發(fā)2運行“git pull --rebase”命令,假設(shè)沒有文件沖突的情況下,合并成功,,這時通過命令“git log --graph --decorate --oneline --all”看下分支圖譜:


    git pull --rebase

場景分析

下面是兩次操作放在一起的圖,方便觀察:


全部

從最終的分支圖譜來對比使用 “git pull” 和 “git pull -- rebase” 的區(qū)別,還是很明顯的。git pull相比于git pull -- rebase 多出了一個分叉,且開發(fā)1和開發(fā)2的提交順序在圖譜中也是反過來的。產(chǎn)生這種區(qū)別的原因是因為拆解后的命令不同:

git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase

至于git fetch、git merge、git rebase的功能細(xì)節(jié),大家可以查看git官方文檔或者參考文章 使用git fetch和git rebase處理多人開發(fā)同一分支的問題

注:git rebase多被用在兩個本地分支的合并上,圖譜同樣顯示清晰,達(dá)到統(tǒng)一提交的目的

用哪個???

這個其實看個人和公司的習(xí)慣,并沒有嚴(yán)格規(guī)定。但是從我的使用習(xí)慣來講,更希望將我的提交放到已經(jīng)提交到遠(yuǎn)程的代碼后面顯得更加的合理,且沒有各種分支也顯得更加的清晰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容