2012-01-20 57 views
1

我有一个git分支,我一直致力于使用提交代码调用feature1。我意识到我希望将一些新功能拆分为一个名为feature2的新分支,并从feature1中删除该功能以保持功能之间的明确分离。删除后合并git分支

我一直在试图找出一个很好的方法来实现这个功能,以便我稍后可以将feature2和/或feature1带入主设备。

我想到的解决方案是基于feature1创建feature2分支,然后从feature1中删除feature2相关的代码。我这样做的担心是,如果feature2先合并到master中,然后feature1合并后,“删除”是否会从master中移除feature2代码?

有没有更好的方法我应该这样做?

+1

如果feature1和feature2的代码在单独的提交中(或者甚至可能是单独的文件),我认为rebasing可能是要走的路。不幸的是,我不太了解如何使用“rebase”为您提供具体的解决方案。 –

+0

如果您对feature1和feature2进行了单独提交,只需分支并执行“rebase -i master”(交互式转置)。然后在feature2分支中忽略关于feature1的提交,反之亦然。 HTTP://book.git-scm。com/4_interactive_rebasing.html – lbolla

+0

请停止编辑问题和答案。谢谢。 –

回答

2

试试这个:

git branch original-tip 
git branch feature2 
git checkout -b feature1 

git rebase -i HEAD~5 # replace 5 with the number of commits to go back 
         # before any of this work occurred 

现在标记所有提交与“编辑”,并删除不具有相关的工作特点1.保存并退出任何线路。现在您将被提示编辑这些提交。添加你需要的任何东西,然后登台,然后

git rebase --continue 

重复这个过程,直到rebase完成。

git checkout feature2 

对feature2应用与之前相同的步骤。在此之后,您将拥有2个独立的功能和一个分支,指向您将它们放在一起的位置。

要添加:

还有另一种方法来完成此操作。

git checkout -b start HEAD~5 
git checkout -b feature1 
git branch feature2 

现在使用结账和或樱桃采摘制作分支。这是获取每次提交所需的确切树的更人工方式。感兴趣的是添加和重置的补丁选项。另外这个语法git的结帐是在这种情况下非常有用:

git checkout <some sha1> -- some files 

的Git让你完成你想要什么的许多方面。根据您的提交的独立程度,您可以选择一种方法而不是另一种方法。

+0

听起来不错。我会试试看。 –

0

最好是在添加feature2相关代码的任何部分之前找到最后一次提交,并以feature2分支为基础。

如果所有f2编辑都是在f1之后添加的,一切都很好,您只需将feature1重置回此提交。否则(如果部分编辑是混合的),您可以选择创建两个具有相同根的新分支(pure_f1,pure_f2),然后通过从当前的feature1个别提交来构建每个分支。