命令使用場景
多人在同一分支進行開發(fā)
場景模擬
git pull
- 假設(shè)有兩個開發(fā)人員在名為“zhangdong”的分支上進行開發(fā)且代碼已同步
- 開發(fā)1修改代碼并add、commit(commit名為“第二次提交”)、push代碼到“zhangdong”分支
- 開發(fā)2 修改代碼并add、commit(commit名為“u”)、push代碼到“zhangdong”分支,會得到失敗提示,需要拉取遠(yuǎn)程最新代碼
- 開發(fā)2運行“git pull”命令,假設(shè)沒有文件沖突的情況下,會有需要進行merge的提示
-
開發(fā)2進行Merge操作,代碼會合并同步,這時通過命令“git log --graph --decorate --oneline --all”看下分支圖譜:
git pull
git pull --rebase
- 假設(shè)有兩個開發(fā)人員在名為“zhangdong”的分支上進行開發(fā)且代碼已同步
- 開發(fā)1修改代碼并add、commit(commit名為“第三次提交”)、push代碼到“zhangdong”分支
- 開發(fā)2 修改代碼并add、commit(commit名為“u”)、push代碼到“zhangdong”分支,會得到失敗提示,需要拉取遠(yuǎn)程最新代碼
-
開發(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)程的代碼后面顯得更加的合理,且沒有各種分支也顯得更加的清晰。

