git rebase
與 git merge
解決了相同的問題。都是將一個分支的提交合併到另外一分支上,那它們有哪些不一樣喃?前端
git merge
master
分支合入到 feature
分支git
git checkout feature git merge master // 或者 git merge master feature
git merge
的優點是它保留了分支的結構與歷史提交目錄,但同時這也致使了提交歷史會被大量的 merge
污染github
git rebase
rebase
命令是一個常常聽到,可是大多數人掌握又不太好的一個命令。rebase
合併每每又被稱爲 「變基」面試
它是將把全部的提交壓縮成一個 patch
。而後把 patch
添加到目標分支裏。rebase
與 merge
不一樣的是,rebase
經過爲原始分支中的每一個提交建立全新的 commits
來重寫項目歷史記錄算法
以 master
分支爲基,對 feautre
分支進行變基:編輯器
git checout feature git rebase master
git rebase
的優點是能夠得到更清晰的項目歷史。首先,它消除了 git merge
所需的沒必要要的合併提交;其次,正如你在上圖中所看到的,rebase
會產生完美線性的項目歷史記錄,你能夠在 feature
分支上沒有任何分叉的狀況下一直追尋到項目的初始提交。url
可是, rebase
會丟失合併提交的上下文, 使咱們沒法看到真實的更改是什麼時候合併到目標分支上的.net
交互式 Rebase
這個命令比 git rebase
更爲強大,它將會在 commits
移動到新分支時更改這些 commits
,一般,這用於在合併 feature
分支到 master
以前清理其雜亂的歷史記錄。code
git checkout feature git rebase -i master
這將打開一個文本編輯器,列出即將移動的全部提交:blog
pick 6633b5a Message for commit #1 pick 3a03f0d Message for commit #2 pick 657897b Message for commit #3
它清晰地展現了分支在 rebase
後的樣子。經過從新調整,提交歷史能夠變成任何你想要的樣子。
消除這種無心義的提交使你的功能歷史更容易理解。這是 git merge
根本沒法作到的事情。
至於 commits
條目前的 pick
、fixup
、squash
等命令,在 git 目錄執行 git rebase -i
便可查看到,你們按需重排或合併提交便可,註釋說明很是清晰,在此不作過多說明
git merge vs git rebase
git merge:
- 記錄下合併動做,不少時候這種合併動做是垃圾信息
- 不會修改原
commit ID
- 衝突只解決一次
- 分支看着不大整潔,可是能看出合併的前後順序
- 記錄了真實的
commit
狀況,包括每一個分支的詳情
git rebase:
- 改變當前分支
branch out
的位置 - 獲得更簡潔的項目歷史
- 每一個
commit
都須要解決衝突 - 修改全部
commit ID
個人建議
隨着團隊增加,經過 merge
策略很難管理和追蹤到每一個提交。爲了提交歷史更清晰、更易於理解,使用 rebase
是一個明智、高效的選擇。
下面是針對不一樣環境的建議,能夠最大限度地發揮 rebase
的優點:
**本地開發:**若是你沒有和別人協同工做,你應該使用 rebasing
而不是 merging
,這樣歷史記錄會很清晰。若是你已經從倉庫拉取了你的我的 fork
,而且不許備和別的開發者一塊兒工做,在分支 push
前 rebase
也是能夠的。
你的代碼準備好了被 review
:你建立了 pull request
。別人正在 review
你的代碼,可能把它拉到了本地 review
。若是這樣,你最好別 rebase
你的代碼。你應該建立一個 「rework」
提交來更新你的 feature
分支。它會讓 pull request
的可塑性更強,也能避免歷史忽然丟失。
review
已經完成而且已經準備好了合併到目標分支。恭喜!你就要刪除你的 feature
分支了。因爲別的開發者不須要拉取、合併這些更改,這是你清理記錄的好機會。你能夠改寫記錄,摺疊原始提交、「pr rework」
提交和 "merge"
提交,使之成爲一整個清晰的提交。做爲可選,你還能夠給這些提交建立一個明確的 merge
,這樣作實際上頗有用。它會記錄 feature
併入 master
的時間。
參考:
An introduction to Git merge and rebase: what they are, and how to use them