2017-04-06 94 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