2017-04-06 122 views
3

比方說,我們有這樣的分支結構:變化的Git父分支

develop -> --- a --- b --- c 
        \   \ 
feature 1 ->  \   --- d --- e 
        \  
feature 2 ->   --- f --- g 

上的功能1做的工作後,我決定它真的應該的被分支爲特徵的子任務2

有沒有一種方法可以讓特性1'撤消'分支開發,並在保持提交的同時分支出特性2?

例子:

develop -> --- a --- b --- c  
        \  
feature 1 ->  \   --- d --- e 
        \  /
feature 2 ->   f --- g 
+1

在這種情況下,rebase將不起作用。你可以這樣做: '''git checkout g; git cherry-pick e〜2..e''' – eftshift0

+2

一個想法可能是從'feature2'構建'feature_1b'分支,cherrypick提交'd'和'e'。刪除'feature1'並將'feature1b'重命名爲'feature1'。 –

回答

3

最簡單的解決辦法是使用具有--onto變基標誌,如Git book中所述。命令:

git rebase --onto feature2 develop feature1 

將變基從feature1提交上未develop發現的feature2頂部。

0

通常你會看git rebase對於這樣的事情,但它不會工作,因爲從特徵1衍合到特點2將包括提交B和C,你不想。

Willem建議使用cherry-pick可能是一條路。

創建一個新的分支:

git checkout -b feature1b feature1 

櫻桃挑感興趣的提交(在這裏我說的「特徵1的最後兩次提交」,但但你可以使用實際的承諾IDS等規定提交的範圍):

git cherry-pick feature1~2..feature1 

在這一點上,分支feature1b匹配您所需的歷史記錄。您可以執行一些可選的清理,根據您的需要:

刪除舊的分支:

git branch -D feature1 

重命名新的分支:

git branch -m feature1 
+0

'git rebase --onto feature2 develop feature1'將一步完成,但我承認這是特別令人困惑的。 :-) – torek