git merge 和 git rebase命令的區別

#將dev分支合併當前分支
git merge dev

#也是將dev分支合併當前分支
git rebase dev

區別與理解:

現在基於遠程分支"origin:develop 上",創建一個叫"mywork"的分支。

$ git checkout -b mywork origin

merge

與此同時有人在origin分支上提交了兩個修改,但是你自己也在自己的分支上mywork 提交了兩個修改
網絡圖片網絡圖片

此時你想要把代碼合到origin上,你需要把origin分支的代碼pull 下來,和你本地的mywork分支進行合併,並且去提交

// 當前分支在mywork 上
$ git checkout mywork
$ git pull origin develop

// 在當前自己分支mywork上(這裏把pull 命令給分步了)
$ git checkout mywork
$ git fetch origin develop:tmp
$ git merge tmp

 git merge 網絡圖片

這樣merge 後會有一個commit
而rebase 不會產生額外的commit。這樣的好處是,‘乾淨’,分支上不會有無意義的解決分支的commit

rebase

讓"mywork"分支歷史看起來像沒有經過任何合併一樣,你也許可以用 git rebase:

$ git checkout mywork
$ git rebase origin:develop

這些命令會把你的"mywork"分支裏的每個提交(commit)取消掉,並且把它們臨時 保存爲補丁(patch)(這些補丁放到".git/rebase"目錄中),然後把"mywork"分支更新 到最新的"origin:develop"分支,最後把保存的這些補丁應用到"mywork"分支上。

在這裏插入圖片描述網絡圖片

當’mywork’分支更新之後,它會指向這些新創建的提交(commit),而那些老的提交會被丟棄。 如果運行垃圾收集命令(pruning garbage collection), 這些被丟棄的提交就會刪除.
在這裏插入圖片描述網絡圖片

在rebase的過程中,也許會出現衝突(conflict). 在這種情況,Git會停止rebase並會讓你去解決 衝突;在解決完衝突後,用"git-add"命令去更新這些內容的索引(index), 然後,你無需執行 git-commit,只要執行:

$ git rebase --continue

在任何時候,你可以用–abort參數來終止rebase的行動,並且"mywork" 分支會回到rebase開始前的狀態。

$ git rebase --abort
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章