git cherry-pick
?是 Git 中的一個非常有用的命令,它允許你將一個或多個特定的提交(commit)從一個分支應用到另一個分支上,而不是合并整個分支。
單個提交的 cherry-pick
假設你有一個?feature
?分支,其中有一個提交(Hash值)?abc123
,你想要將這個提交應用到?master
?分支上。你可以按照以下步驟操作:
- 切換到目標分支:
git checkout master
- 執行 cherry-pick:
git cherry-pick abc123
這條命令會在?master
?分支上創建一個新的提交,這個新提交包含與?abc123
?相同的更改,但會有一個不同的提交哈希值。
多個提交的 cherry-pick
如果你想要 cherry-pick 多個連續的提交,可以使用下面的語法:
git cherry-pick <HashA>^..<HashB>
注意,這里的?<HashA>^
?表示從?<HashA>
?的父提交開始(即不包括?<HashA>
?本身),到?<HashB>
(包括?<HashB>
)之間的所有提交。但是,更常見的做法是直接列出你想要 cherry-pick 的提交哈希值,用空格分隔:
git cherry-pick <HashA> <HashB> <HashC>
這將在當前分支上依次創建?<HashA>
、<HashB>
?和?<HashC>
?的新提交。
處理合并提交
如果你嘗試 cherry-pick 一個合并提交(在?git log
?中顯示為包含多個父提交的提交),Git 會報錯,因為它不知道應該采用哪個父分支的更改。為了解決這個問題,你可以使用?-m
?選項來指定合并提交中的一個父分支:
git cherry-pick -m 1 <commitHash>
這里的?-m 1
?表示采用合并提交中編號為 1 的父分支的更改。編號從 1 開始,通常 1 表示“主要”或“目標”分支,而 2 表示被合并進來的分支。
解決沖突
在 cherry-pick 過程中,如果新提交的更改與當前分支的更改發生沖突,Git 會停止 cherry-pick 過程,并讓你解決沖突。解決沖突后,你需要執行以下命令來繼續 cherry-pick 過程:
git add . # 將解決沖突后的文件添加到暫存區
git cherry-pick --continue # 繼續 cherry-pick 過程
如果你決定放棄 cherry-pick,可以使用以下命令:
git cherry-pick --abort
這將撤銷 cherry-pick 操作,并將工作目錄和暫存區恢復到 cherry-pick 之前的狀態。