前言

  • 案例:
    專案開發過程中,遇到開發的分支可能新增了三個功能分別為A、B、C。
    但是正式上線時,只要某兩個功能A、C,另一個功能B 留待日後上線。
    此時,我們面臨到一個問題:
    • 我們辛苦開發的程式碼不能不見。
    • 又不希望將整個分支的內容備份到另一個分支。

那個該如何解決這個問題呢??

我們可以做的事:
使用cheery-pick,來撿取某個分支的某個commit點程式碼,將某個功能移到另一個分支。


cherry-pick的使用方式

假設有個開發分支(未上線):
test

保存用的新的分支是(只包含test部分commit)
new_test
(不要從test開新分支,要從main開,這樣才能確保只攜帶必要的功能)

示範情境:要把test中某些功能撿去new_test的分支

Step 1: 查詢test分支的commit紀錄

1
git log --oneline test

假設查詢結果如下:
example_commit
假設要把上架蘋果功能撿到new_test分支,先記住commit點開頭的sha值(ef8b6a3)

Step 2: 切換分支到 new_test

1
git checkout new_test

Step 3: 執行cherry-pick

1
git cherry-pick ef8b6a3

這樣new_test分支就會包含 上架蘋果commit點 的內容了,且不會有其他不需要的commit。


結論

總結來說:
cherry-pick 是用來撿取某個commit點,不會影響其他commit或是分支。

從示範的案例可以知道,反過來說今天如果只要 開發分支A 的某個功能,
那也是可以在 B分支 只 cherry-pick A的某個功能,改成推送B分支上線就可以了。