rebase是什麼?如何使用rebase指令呢?下面我們就如何來使用git rebase指令來研究一下。
我們知道在 Git 中整合來自不同分支的修改主要有兩種方法:merge 以及 rebase。事實上git rebase 和git merge 做的事其實是一樣的。它們都被設計來將一個分支的變更併入另一個分支,只不過方式有些不同。
merge 指令範例
git checkout feature git merge master
這樣feature 分支中新的合併提交(merge commit)將兩個分支的歷史連在了一起
# Merge 還好它是一個安全的操作。現有的分支不會被更改
每次合併上游更改時 feature 分支都會引入一個外來的合併提交。如果上游分支非常活躍的話,這或多或少會污染你的分支歷史
Rebase 指令範例
git checkout feature git rebase master
它會把整個feature 分支移到master 分支的後面,有效地把所有master 分支上新的提交併入過來
但是,rebase 為原始分支上每一個提交創建一個新的提交,重寫了項目歷史,並且不會帶來合併提交。
在對兩個分支進行rebase時,所產生的「重播」並不一定要在目標分支上應用,你也可以指定另外的一個分支進行應用。你創建了一個特性分支 server,為服務端增加了一些功能,提交了 C3 和 C4。然後從 C3 上建立了特性分支 client,為客戶端添加了一些功能,提交了 C8 和 C9。最後,你回到 server 分支,又提交了 C10。
假設你希望將 client 中的修改合併到主分支並發布,但暫時並不想merge server 中的修改,因為它們還需要更全面的測試。這時,你就可以使用git rebase 指令的--onto 選項,選取在client 分支裡但不在server 分支裡的修改(即C8 和C9),將它們在master 分支上重播:
$ git rebase --onto master server client
以上指令的意思是:「取出client 分支,找出處於client 分支和server 分支的共同祖先之後的修改,然後把它們在master 分支上重播一遍」。這理解起來有一點複雜,不過效果非常酷。
現在可以快轉merge master 分支了。
$ git checkout master $ git merge client
接下來你決定將 server 分支中的修改也整合進來。使用 git rebase [basebranch] [topicbranch] 指令可以直接將特性分支(即本例中的 server)rebase到目標分支(即 master)上。這樣做能省去你先切換到 server 分支,再對其執行rebase指令的多個步驟。
$ git rebase master server
rebase在開發中的使用場景
rebase 可以或多或少地應用在你們團隊的Git 工作流程中
本地清理
隔一段時間執行一次互動式rebase,你可以保證你feature 分支中的每一個提交都是專注和有意義的。你在寫程式碼時不用擔心造成孤立的提交——因為你後面一定能修復
下面的命令對最新的3 次提交進行了交互式rebase:
git checkout feature git rebase -i HEAD~3
你實際上沒有移動分支-你只是將之後的3 次提交合併了
互動式rebase 是在你工作流程中引入git rebase 的好方法,因為它只影響本地分支。其他開發者只能看到你已經完成的結果,那就是一個非常整潔、易於追蹤的分支歷史。
但同樣的,這只能用在私有分支上。如果你在同一個 feature 分支和其他開發者合作的話,這個分支是公開的,你不能重寫這個歷史。
以上是Git中git rebase怎麼用來合併分支的詳細內容。更多資訊請關注PHP中文網其他相關文章!