IDEA Git Cherry-Pick(摘櫻桃) 實現分支的部分提交合並到dev


Git Cherry-pick,通常叫做摘櫻桃。此為Git 的一種操作,作用是將部分代碼從一個分支轉移到另一個分支。

一般情況下,我們采用的是 git merge的方式來合並兩個分支的代碼。這種情況,適用於我們需要另一個分支的所有代碼變動(包含創建分支前的base代碼)。

另一種情況是,你只需要部分代碼變動(某幾個提交),那么就可以采用 Cherry pick。

 

下面通過一個實例講解下操作步驟:

分別有A、B兩個開發團隊做同一個項目,開發側接到一個版本需求,假定需要在2021.01.21上線,A做財務相關功能,B做服務相關功能。

A團隊由於時間充裕,提前進入開發,在1月8號從dev新建了一個分支,取名: dev-finance-20210121。

一頓操作,1月12號,A團隊開發好了,於是通過merge方式將 dev-finance-20210121 分支合並到dev分支。

1月13號,此時B團隊忙完了手頭的事,進入開發階段,於是從dev新建另外一個分支,取名: dev-service-20210121。注意:此時創建的分支包含了A團隊提交的內容。

1月15號,B團隊也開發好了,於是通過merge方式將 dev-service-20210121 分支合並到dev分支。

 

兩邊開發完畢,只等測試對不對。

但是,突然1月16號,A團隊由於依賴方延期原因,上不了線了,產品也同意,需要回退!而B團隊的功能正常上線。

那么,就得把dev的代碼整體回退到未開發之前的版本。duang duang duang,回退成功!

此時,dev分支上,缺少了A團隊提交的代碼,沒問題。可是缺少了B團隊提交的代碼,這怎么能行呢,B還得上線吖。

再次通過merge方式將 dev-service-20210121 分支合並到dev分支?

額,不行, dev-service-20210121分支創建於A團隊提交之后,包含了A提交的代碼,這樣會把A團隊提交的內容整體帶過去。

假如重新建分支,再把之前的改動,一段一段代碼拷貝進去,這樣更不行,太麻煩了,而且容易漏。

怎么辦呢?嘿嘿,這時咱們的 Cherry pick 就起作用了。

 

直接將 dev-service-20210121 分支 Cherry pick 到 dev分支雖然可以實現,但是測試階段,開發還得改啊。難道每次改了都 Cherry pick 嗎?這多麻煩。

此時,采用新建分支+ Cherry pick的方法,之后就可以使用merge方式了。

於是,1月17號,B團隊再次從dev新建一個分支,取名: dev-service-20210121-new。注意:此時創建的分支不包含A團隊提交的內容,因為dev分支已經回退了。

采用 Cherry pick 方式,B團隊將 dev-service-20210121 分支上提交的部分合並到 dev-service-20210121-new 分支。

再把 dev-service-20210121-new 分支 merge 到 dev分支。這時,就實現了dev分支上,只包含B團隊提交的內容。

廢棄dev-service-20210121分支,之后B團隊就在 dev-service-20210121-new 分支上修改bug,修改完bug,合到 dev 分支時,想怎么merge怎么merge。

 

怎么操作呢?請看下面在idea中的示例:

1.右鍵module名稱,將項目切換到新的分支 dev-service-20210121-new

 

 

 

 

 

 

2.打開git Log,找到該module的git Log窗口,選擇select,查詢原來的 dev-service-20210121分支

 

 

 

 

 

 

3.從提交歷史中,選中需要合並過來的提交內容,右鍵進行 Cherry pick。(如果有沖突,說明你切換到新分支后,在本地改過代碼又沒有提交,這時需要解決沖突)

 

 

 

4.這樣就把 原來的 dev-service-20210121分支需要的提交內容合並到本地啦。當然這個只是在本地,如果要合並到 新分支 dev-service-20210121-new,還需要右鍵 module ,push一下(Cherry pick 到本地的代碼部分是默認提交的,無需commit了)。

 

 

 

5、這樣就大功告成啦,之后可以任意從 dev-service-20210121-new 新分支merge到 dev分支了(不帶A團隊提交的內容)。如測試階段有bug ,要改代碼也在 dev-service-20210121-new 上改。

 

至此,通過 Git Cherry-Pick(摘櫻桃) 方式實現了只上線部分功能的需求。


————————————————
版權聲明:本文為CSDN博主「格子衫111」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u012660464/article/details/112685800


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM