2017-03-24 92 views
2

我有一個功能1,功能2和一些修復程序的開發分支。由於另一個開發原因,我們想從開發中創建另一個分支,並且只需要該分支中的修復,而不需要功能1和功能2.因此,我從開發中創建了一個分支並恢復了功能1和功能2的提交。現在我們在這個新分支中進行了一些開發。現在我想將這個分支與開發分支合併。但是我們需要開發分支中的功能1和2。但是,如果我們合併,那麼功能1和2提交將從開發中移除。Git合併和未復原提交

那麼在git中解決它的最好方法是什麼?一種方法是獲取功能1和2的更改並將其作爲補丁應用於合併的開發分支。但問題是這兩個功能有幾個變化。

回答

2

在下面的答案中,我假設當你從develop分支出來時,你所做的第一件事是恢復這兩個特性提交,然後你完成了你的實際開發工作。如果情況並非如此,我的答案應該仍然有幫助,儘管您需要採取一些額外步驟來解決您的情況。

也許你的問題的概念上最簡單的解決辦法是剛摘櫻桃的非還原從新的分支提交到develop

git checkout develop 
git cherry-pick B^..D 

更換BD與SHA-1提交的哈希值提交你想從新分支帶入develop。請注意,由於您正在將工作重新應用到其他基礎上,因此可能會因此而導致合併衝突。

如果您感覺更冒險,也可以嘗試使用git rebase --onto。下面是說明你的新分支和develop的當前狀態的圖:

develop ... ---A---B---C 
        \ 
newbranch   R1---R2---D---E 

你想從newbranchdevelop頂部發揮DE提交,而忽略那些R1R2復歸提交。換句話說,你想用這個來結束:

develop ... ---A---B---C---D'---E' 
        \ 
newbranch   R1---R2---D---E 

您可以使用下面的命令來實現這一目標:

git checkout develop 
git rebase --onto C R2 E 

onto命令說要採取C爲基地,並重播所有承諾其父母爲R2(但不包括R2本身),直至幷包括承諾E。由於CdevelopHEAD一致,因此我們只是要求Git重新提交DE的提交,依次爲develop的頂端。

如果你想Git的rebase --onto的極好的解釋,我建議你閱讀由@Enrico這裏給出了答案:

I can't understand the behaviour of git rebase --onto