使用下面的關係區別這兩個操做:
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebasegit
如今來看看git merge和git rebase的區別。app
假設有3次提交A,B,C。fetch
在遠程分支origin的基礎上建立一個名爲"mywork"的分支並提交了,同時有其餘人在"origin"上作了一些修改並提交了。spa
其實這個時候E不該該提交,由於提交後會發生衝突。如何解決這些衝突呢?有如下兩種方法:3d
一、git merge
用git pull命令把"origin"分支上的修改pull下來與本地提交合並(merge)成版本M,但這樣會造成圖中的菱形,讓人很困惑。blog
二、git rebase
建立一個新的提交R,R的文件內容和上面M的同樣,但咱們將E提交廢除,當它不存在(圖中用虛線表示)。因爲這種刪除,小李不該該push其餘的repository.rebase的好處是避免了菱形的產生,保持提交曲線爲直線,讓你們易於理解。it
在rebase的過程當中,有時也會有conflict,這時Git會中止rebase並讓用戶去解決衝突,解決完衝突後,用git add命令去更新這些內容,而後不用執行git-commit,直接執行git rebase --continue,這樣git會繼續apply餘下的補丁。
在任什麼時候候,均可以用git rebase --abort參數來終止rebase的行動,而且mywork分支會回到rebase開始前的狀態。基礎