在下面的答案中,我假設當你從develop
分支出來時,你所做的第一件事是恢復這兩個特性提交,然後你完成了你的實際開發工作。如果情況並非如此,我的答案應該仍然有幫助,儘管您需要採取一些額外步驟來解決您的情況。
也許你的問題的概念上最簡單的解決辦法是剛摘櫻桃的非還原從新的分支提交到develop
:
git checkout develop
git cherry-pick B^..D
更換B
和D
與SHA-1提交的哈希值提交你想從新分支帶入develop
。請注意,由於您正在將工作重新應用到其他基礎上,因此可能會因此而導致合併衝突。
如果您感覺更冒險,也可以嘗試使用git rebase --onto
。下面是說明你的新分支和develop
的當前狀態的圖:
develop ... ---A---B---C
\
newbranch R1---R2---D---E
你想從newbranch
上develop
頂部發揮D
和E
提交,而忽略那些R1
和R2
復歸提交。換句話說,你想用這個來結束:
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
。由於C
與develop
的HEAD
一致,因此我們只是要求Git重新提交D
和E
的提交,依次爲develop
的頂端。
如果你想Git的rebase --onto
的極好的解釋,我建議你閱讀由@Enrico這裏給出了答案:
I can't understand the behaviour of git rebase --onto