挑選提交(Cherry-Picking)

Git 進階

Amanda Crawford-Adamo

Software and Data Engineer

什麼是 cherry-pick?

將特定提交的變更套用到另一個分支

挑選單一提交

git cherry-pick <commit-hash>

挑選多個提交

git cherry-pick <hash1> <hash2> ..

目的

  • 在分支間套用特定錯誤修正
  • 將功能回退到穩定版本
  • 選擇性套用實驗性變更
  • 復原遺失的提交
Git 進階

Cherry-Pick 範例

一張主分支與功能分支的圖。main 有兩個提交。feature 分支在最後一次提交後自 main 分出。

兩張圖,顯示在進行 cherry-pick 前,main 與 feature 分支的紀錄。

Git 進階

Cherry-Pick 流程

  1. 切換到 main 分支

    git checkout main
    
  2. 執行 cherry-pick,將 feature 分支提交 def456 的變更帶入。

    git cherry-pick def456
    

一張主分支與功能分支的圖。main 有三個提交。feature 分支在第二次提交後自 main 分出,並多了兩次提交。main 的第三次提交是自 feature 分支最後一次提交挑選而來。

Git 進階

解決 cherry-pick 衝突

衝突解決步驟
  1. 手動編輯發生衝突的檔案
  2. 將已解決的檔案加入暫存區 git add <resolved-files>
  3. 使用 --continue 旗標,繼續 cherry-pick 流程
git cherry-pick --continue
停止 cherry-pick

若要停止 cherry-pick 作業,使用 --abort 旗標

git cherry-pick --abort
Git 進階

何時使用 cherry-pick

使用情境

  1. 套用熱修(hotfix)
  2. 測試獨立功能

注意事項

  1. 可能產生重複提交
  2. 過度使用會使歷史複雜化
  3. 變更很大時,考慮使用 merge 或 rebase
Git 進階

一起來練習吧!

Git 進階

Preparing Video For Download...