git rebase --onto 的奇妙用法

多芒小丸子發表於2019-01-16

git rebase --onto 的奇妙用法

場景

開發專案的過程中,在特殊的大環境下,因為專案涉及到一些敏感的資訊,專案方提出了需求,需要將現有的專案暫時修改,以適應當下的政策,但是過了這段時間還需要恢復,同時未恢復的這段時間,我們也實現了很多新的需求。如上圖,紫色塊是為了適應政策調整的,也就是以後恢復的時候要捨棄的部分。而白色塊下方的黃色塊就是我備份的,而等專案要恢復以後我們真的要需要的就是整個黃色塊的流程。

解決方法

在備份的基礎上,將所有後提交的黃色塊對應的commit給合併過來,而我們強大的git,也有相應的命令可以處理。即

// base分支名稱
// from待合併片段的起始commitId(不包含)
// to待合併片段的結束commitId(包含)
git rebase --onto base from to
複製程式碼

操作步驟

1.當前工作空間---分支A
2.從當前工作的分支新建一個分支,並且換到該分支----git checkout -b newbranch
3.git rebase --onto B 開始的commitId 結束的commitId
4.生成一個基於B分支和選擇的提交區間的片段生成一個新的分支(detached Head)
5.從當前工作空間新建切換到一個新的分支---git checkout -b branch_bank
6.分支branch_bank的程式碼就是我們所需要的了
7.branch_bank強制覆蓋A分支,切換到A分支,---git reset --hard origin branch_bank
8.程式碼就恢復正常啦
複製程式碼

感慨

每次用git的命令解決一個新的問題,都感覺發現了新大陸。。

相關文章