什麼是挑選?
挑選(cherry-pick)是一種從一個分支中選擇特定提交並將其應用到另一個分支的方法。在兩個不同的開發者分別在 A 和 B 兩個分支上獨立開發的情況下,假設 A 分支上提交了一個重要的 Bug 修正。B 分支可以透過挑選該提交來套用這個 Bug 修正。
相較於將 B 分支變基到 A 分支上的做法,挑選的目的是單純套用單一或數筆提交,而不是整個分支的合併或重整。
挑選現有提交
使用 VS Code
挑選是 Git 中相對簡單的部分。在當前分支上對著想要的提交右鍵
,選擇 Cherry Pick...
即可。
使用指令
當前的分支狀態,注意提交 ID 的部分:
目前在 CP 分支上的提交是 52a310a7,如果只想挑選 2f01e37
,在指令中輸入git cherry-pick 2f01e37
:
|
|
同理,如果要挑選連續的範圍,記住頭尾的提交 ID,並輸入:
|
|
以下是範例,挑選從 5d59 到 b03a 之間的提交(包含頭尾):
|
|
執行上面的結果,其最終的分支狀態為:
如果途中遇到衝突、需要手動解決。或是透過 git cherry-pick --abort
進行終止 cherry-pick 的行為。這部分只能透過指令。
挑選特定檔案的變更
在 Git 中,cherry-pick 命令僅能挑選整個提交,而無法直接挑選某個特定檔案的變更。但如果只想挑出某個提交或分支中的特定檔案,可以使用 checkout 命令來達成這個目標。
|
|
如下圖所示,目前所在的 CP 分支位於提交 ID 52a310a7
,我們可以透過 checkout 命令,取得提交 ID 為 d616aa83
(WITH_ANOTHER_FIX_ALL) 提交下的 file.txt 檔案:
|
|
此時,檔案會被放置在暫存區內,然後可以透過 VS Code 進行提交操作:
最終的分支結果如下圖所示,其中提交 ID 為 223cf241
的 File.txt_已修復
包含了「修正 file.txt」與「WITH_ANOTHER_FIX_ALL」的變更。這是一個在簡化和合併提交時相當常見的技巧,通過將不同提交中的變更集中到一個文件中,可以更有效地管理和整合代碼庫中的改動。
總結
使用挑選指令,我們可以在不同的分支間複製提交至當前分支。隨著挑選次數的增加,分支結構會變得越來越複雜且難以維護。
適時地利用變基或合併操作,能夠簡化分支的複雜度,尤其是在處理如最後案例中,包含多個檔案修改的提交時,合併會更容易遇到檔案衝突,對於專案不夠熟悉的新手來說維護起來會非常困難。