常常被問到如何從一個分支合併特定的commits到另外一個分支。有時候你須要這樣作,只合並你須要的那些commits,不須要的commits就不合並進去了。git
首先,用git log或GitX工具查看一下你想選擇哪些commits進行合併,例如:sql
dd2e86 - 946992 -9143a9 - a6fd86 - 5a6057 [master]工具
\spa
76cada - 62ecb3 - b886a0 [feature].net
好比,feature 分支上的commit 62ecb3 很是重要,它含有一個bug的修改,或其餘人想訪問的內容。不管什麼緣由,你如今只須要將62ecb3 合併到master,而不合並feature上的其餘commits,因此咱們用git cherry-pick命令來作:code
git checkout master git cherry-pick 62ecb3
這樣就好啦。如今62ecb3 就被合併到master分支,並在master中添加了commit(做爲一個新的commit)。cherry-pick 和merge比較相似,若是git不能合併代碼改動(好比遇到合併衝突),git須要你本身來解決衝突並手動添加commit。ci
在一些特性狀況下,合併單個commit並不夠,你須要合併一系列相連的commits。這種狀況下就不要選擇cherry-pick了,rebase 更適合。還以上例爲例,假設你須要合併feature分支的commit76cada ~62ecb3 到master分支。get
首先須要基於feature建立一個新的分支,並指明新分支的最後一個commit:it
git checkout -b newbranch 62ecb3
而後,rebase這個新分支的commit到master(--ontomaster)。76cada^ 指明你想從哪一個特定的commit開始。ast
git rebase --onto master 76cada^
獲得的結果就是feature分支的commit 76cada ~62ecb3 都被合併到了master分支。
[英文原文] https://ariejan.net/2010/06/10/cherry-picking-specific-commits-from-another-branch/