命令使用場景
多人在同一分支進(jìn)行開發(fā)
場景模擬
git pull
- 假設(shè)有兩個(gè)開發(fā)人員在名為“zhangdong”的分支上進(jìn)行開發(fā)且代碼已同步
- 開發(fā)1修改代碼并add、commit(commit名為“第二次提交”)、push代碼到“zhangdong”分支
- 開發(fā)2 修改代碼并add、commit(commit名為“u”)、push代碼到“zhangdong”分支,會得到失敗提示,需要拉取遠(yuǎn)程最新代碼
- 開發(fā)2運(yùn)行“git pull”命令,假設(shè)沒有文件沖突的情況下,會有需要進(jìn)行merge的提示
-
開發(fā)2進(jìn)行Merge操作,代碼會合并同步,這時(shí)通過命令“git log --graph --decorate --oneline --all”看下分支圖譜:
git pull
git pull --rebase
- 假設(shè)有兩個(gè)開發(fā)人員在名為“zhangdong”的分支上進(jìn)行開發(fā)且代碼已同步
- 開發(fā)1修改代碼并add、commit(commit名為“第三次提交”)、push代碼到“zhangdong”分支
- 開發(fā)2 修改代碼并add、commit(commit名為“u”)、push代碼到“zhangdong”分支,會得到失敗提示,需要拉取遠(yuǎn)程最新代碼
-
開發(fā)2運(yùn)行“git pull --rebase”命令,假設(shè)沒有文件沖突的情況下,合并成功,,這時(shí)通過命令“git log --graph --decorate --oneline --all”看下分支圖譜:
git pull --rebase
場景分析
下面是兩次操作放在一起的圖,方便觀察:

從最終的分支圖譜來對比使用 “git pull” 和 “git pull -- rebase” 的區(qū)別,還是很明顯的。git pull相比于git pull -- rebase 多出了一個(gè)分叉,且開發(fā)1和開發(fā)2的提交順序在圖譜中也是反過來的。產(chǎn)生這種區(qū)別的原因是因?yàn)椴鸾夂蟮拿畈煌?/p>
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多被用在兩個(gè)本地分支的合并上,圖譜同樣顯示清晰,達(dá)到統(tǒng)一提交的目的
用哪個(gè)???
這個(gè)其實(shí)看個(gè)人和公司的習(xí)慣,并沒有嚴(yán)格規(guī)定。但是從我的使用習(xí)慣來講,更希望將我的提交放到已經(jīng)提交到遠(yuǎn)程的代碼后面顯得更加的合理,且沒有各種分支也顯得更加的清晰。

