詳解Git 的 rebase 命令使用方法

在基於 Git 的開發過程中,我們很容易遇到合並代碼的情況,例如我們從 master 分支拉取瞭一個 feature 分支,當我們開發到一段時間之後,可能需要將 master 的代碼合並到我們當前的 feature 分支之中。

這時,我們有兩個選擇,一個是使用git merge命令,一個是使用git rebase命令,這兩個命令都是用來合並代碼的,但卻有一些差異。在本文中,我們主要講述git rebase命令的使用方法,也會簡單介紹這兩個命令的差異。

fork_master

如上圖所示,我們從 master 分支拉取瞭一個名為 feature 的分支,並且在拉取新分支之後,有過三次提交記錄;同時,master 分支在我們拉取 feature 分支之後,也有過兩次提交記錄。現在我們已經構造瞭背景,接下來我們合並代碼。

merge_master

首次,我們使用merge命令,其命令形式一般為git merge --no-ff master,即表示將 master 的代碼合並到 feature 分支,其中--no-ff參數是為瞭保留 master 分支的提交記錄。如上圖所示,在使用merge命令進行代碼合並之後,Git 會自動創建一個新的 commit 用來表示當前的合並操作,此 commit 記錄瞭 master 代碼合並到 feature 分支時產生的所有改動。

rebase_master

接下來,我們使用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命令繼續合並操作。

通過上面的描述,我們能發現mergerebase有一個很明顯的差異,那就是當遇到沖突的時候,使用merge命令,我們隻需要解決一次沖突即可;使用rebase命令,我們則需要依次解決每一個沖突。

對於 Git 的rebase命令,其除瞭能進行代碼合並之外,還有一個常用的功能,那就是將多個 commit 合並為一個,仍然以上面的 feature 分支為例,我們將其從 master 分支拉取之後,進行瞭三次提交,現在我們將這三個提交結論合並為一個,其命令一般形式為:

git rebase -i HEAD~N

其中,N為我們需要合並的 commit 記錄的數量,因為示例中是三次提交記錄,所以在此場景下,將N替換為3即可。

在執行完上面的命令之後,我們會進入vi或者vim文件編輯器:

rebase_test

如上圖所示,pick標識瞭我們的三次提交記錄,按i建進入編輯模式,保留第一個pick,然後將後面兩個pick修改為s或者f,然後鍵入:wq保留修改。最後,為瞭將變更同步到遠程分支,我們需要使用git push -f命令,其中參數-f表示強制提交。

到此這篇關於Git 的 rebase 命令使用方法的文章就介紹到這瞭,更多相關git rebase 命令內容請搜索LevelAH以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持LevelAH!

推薦閱讀: