詳解Git 的 rebase 命令使用方法
在基於 Git 的開發過程中,我們很容易遇到合並代碼的情況,例如我們從 master 分支拉取瞭一個 feature 分支,當我們開發到一段時間之後,可能需要將 master 的代碼合並到我們當前的 feature 分支之中。
這時,我們有兩個選擇,一個是使用git merge
命令,一個是使用git rebase
命令,這兩個命令都是用來合並代碼的,但卻有一些差異。在本文中,我們主要講述git rebase
命令的使用方法,也會簡單介紹這兩個命令的差異。
如上圖所示,我們從 master 分支拉取瞭一個名為 feature 的分支,並且在拉取新分支之後,有過三次提交記錄;同時,master 分支在我們拉取 feature 分支之後,也有過兩次提交記錄。現在我們已經構造瞭背景,接下來我們合並代碼。
首次,我們使用merge
命令,其命令形式一般為git merge --no-ff master
,即表示將 master 的代碼合並到 feature 分支,其中--no-ff
參數是為瞭保留 master 分支的提交記錄。如上圖所示,在使用merge
命令進行代碼合並之後,Git 會自動創建一個新的 commit 用來表示當前的合並操作,此 commit 記錄瞭 master 代碼合並到 feature 分支時產生的所有改動。
接下來,我們使用rebase
命令,其命令一般形式為git rebase feature
,即表示在 master 分支上執行rebase
命令,將 feature 分支的代碼合並到 master 分支。如上圖所示,在使用rebase
命令之後,Git 會合並兩個分支的 commit 記錄,其規則為「在基準分支上合並目標分支的代碼,會將目標分支的提交記錄全部前置到基準分支的最新提交記錄之前」,就如上面這樣,我們在 master 分支上使用瞭rebase
命令之後,Git 將 feature 分支上面的所有 commit 記錄都前置到瞭 master 分支的最新 commit 記錄之前。
在這裡,需要註意的是:rebase
是以 commit 為維度的,按 commit 提交的順序依次進行合並操作;如果在合並的過程中,某個 commit 遇到瞭沖突,則需要我們先解決該沖突,然後才能繼續進行合並操作。特別地,在我們解決沖突之後,需要使用git add + 沖突文件
命令將當前沖突標記為已解決,然後使用git rebase --continue
命令繼續合並操作。
通過上面的描述,我們能發現merge
和rebase
有一個很明顯的差異,那就是當遇到沖突的時候,使用merge
命令,我們隻需要解決一次沖突即可;使用rebase
命令,我們則需要依次解決每一個沖突。
對於 Git 的rebase
命令,其除瞭能進行代碼合並之外,還有一個常用的功能,那就是將多個 commit 合並為一個,仍然以上面的 feature 分支為例,我們將其從 master 分支拉取之後,進行瞭三次提交,現在我們將這三個提交結論合並為一個,其命令一般形式為:
git rebase -i HEAD~N
其中,N
為我們需要合並的 commit 記錄的數量,因為示例中是三次提交記錄,所以在此場景下,將N
替換為3
即可。
在執行完上面的命令之後,我們會進入vi
或者vim
文件編輯器:
如上圖所示,pick
標識瞭我們的三次提交記錄,按i
建進入編輯模式,保留第一個pick
,然後將後面兩個pick
修改為s
或者f
,然後鍵入:wq
保留修改。最後,為瞭將變更同步到遠程分支,我們需要使用git push -f
命令,其中參數-f
表示強制提交。
到此這篇關於Git 的 rebase 命令使用方法的文章就介紹到這瞭,更多相關git rebase 命令內容請搜索LevelAH以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持LevelAH!
推薦閱讀:
- Git的代碼合入流程詳解
- Git遠程刪除某個歷史提交記錄方法詳解
- Git多人協同開發緊急修復線上bug操作指南
- git merge –ff/–no-ff/–ff-only 三種選項參數的區別解析
- 45個GIT經典操作場景使用詳解