常常被問到如何從一個分支合併特定的文件到另外一個分支。其實,只合並你須要的那些commits,不須要的commits就不合並進去了。git
首先,用git log或sourcetree工具查看一下你想選擇哪些commits進行合併,例如:工具
好比feature 分支上的commit 82ecb31 很是重要,它含有一個bug的修改,或其餘人想訪問的內容。不管什麼緣由,你如今只須要將82ecb31 合併到master,而不合並feature上的其餘commits,因此咱們用git cherry-pick命令來作:spa
git checkout master
git cherry-pick 82ecb31
這樣就好啦。如今82ecb31就被合併到master分支,並在master中添加了commit(做爲一個新的commit)。cherry-pick 和merge比較相似,若是git不能合併代碼改動(好比遇到合併衝突),git須要你本身來解決衝突並手動添加commit。code
這裏git cherry-pick每次合併過來會顯示文件衝突(其實並無衝突代碼部分,只需手動解決既可)blog
在一些特性狀況下,合併單個commit並不夠,你須要合併一系列相連的commits。這種狀況下就不要選擇cherry-pick了,rebase 更適合。還以上例爲例,假設你須要合併feature分支的commit76cada ~62ecb3 到master分支。it
首先須要基於feature建立一個新的分支,並指明新分支的最後一個commit:ast
git checkout featuregit
git checkout -b newbranch 62ecb3
而後,rebase這個新分支的commit到master(--ontomaster)。76cada^ 指明你想從哪一個特定的commit開始。class
git rebase --ontomaster 76cada^
獲得的結果就是feature分支的commit 76cada ~62ecb3 都被合併到了master分支。bug
另外若是隻想將feature分支的某個文件f.txt合併到master分支上。
1: git checkout feature
2: git checkout --patch master f.txt
第一個命令: 切換到feature分支;
第二個命令:合併master分支上f文件到feature分支上,將master分支上 f 文件追加補丁到feature分支上 f文件。你能夠接受或者拒絕補丁內容。sourcetree
若是隻是簡單的將feature分支的文件f.txt copy到master分支上;
git checkout mastergit checkout feature f.txt