Git合併指定文件到另外一個分支

常常被問到如何從一個分支合併特定的文件到另外一個分支。其實,只合並你須要的那些commits,不須要的commits就不合並進去了。git

  • 合併某個分支上的單個commit

首先,用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

  • 合併某個分支上的一系列commits

在一些特性狀況下,合併單個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

相關文章
相關標籤/搜索