Git合併指定一系列commits到另外一個分支

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

合併某個分支上的單個commit
首先,用git log或sourcetree工具查看一下你想選擇哪些commits進行合併,例如:html

好比feature 分支上的commit 82ecb31 很是重要,它含有一個bug的修改,或其餘人想訪問的內容。不管什麼緣由,你如今只須要將82ecb31 合併到master,而不合並feature上的其餘commits,因此咱們用git cherry-pick命令來作:git

git checkout master  
git cherry-pick 82ecb31【這個貌似能夠一次性合併多個commits,用空格隔開便可?】

這樣就好啦。如今82ecb31就被合併到master分支,並在master中添加了commit(做爲一個新的commit)。cherry-pick 和merge比較相似,若是git不能合併代碼改動(好比遇到合併衝突),git須要你本身來解決衝突並手動添加commit。工具

這裏git cherry-pick每次合併過來會顯示文件衝突(其實並無衝突代碼部分,只需手動解決既可)code

合併某個分支上的一系列commits
在一些特性狀況下,合併單個commit並不夠,你須要合併一系列相連的commits。這種狀況下就不要選擇cherry-pick了,rebase 更適合。還以上例爲例,假設你須要合併feature分支的commit 76cada ~ 62ecb3 到master分支。htm

首先須要基於feature建立一個新的分支,並指明新分支的最後一個commit:blog

git checkout featuregit 
git checkout -b newbranch 62ecb3

而後,rebase這個新分支的commit到master(–ontomaster)。76cada^ 指明你想從哪一個特定的commit開始。get

git rebase --ontomaster 76cada^

獲得的結果就是feature分支的commit 76cada ~62ecb3 都被合併到了master分支。it

另外若是隻想將feature分支的某個文件f.txt合併到master分支上。
1: git checkout feature
2: git checkout --patch master f.txt
第一個命令: 切換到feature分支;
第二個命令:合併master分支上f文件到feature分支上,將master分支上 f 文件追加補丁到feature分支上 f文件。你能夠接受或者拒絕補丁內容。ast

若是隻是簡單的將feature分支的文件f.txt copy到master分支上;

git checkout master
git checkout feature f.txt

不管從事什麼行業,只要作好兩件事就夠了,一個是你的專業、一個是你的人品,專業決定了你的存在,人品決定了你的人脈,剩下的就是堅持,用善良專業和真誠贏取更多的信任。不忘初心 方得始終!
分類: git點滴
原帖地址 : http://www.javashuo.com/article/p-ackzmoeg-dx.html原做者 : 周伯通的麥田

相關文章
相關標籤/搜索