删除后合并git分支

时间:2012-01-20 17:49:55

标签: git

我有一个我一直在使用的git分支,名为feature1,带有已提交的代码。我意识到我想将一些新功能拆分为一个名为feature2的新分支,并从feature1中删除该功能,以便在功能之间保持清晰的分离。

我一直试图想出一个很好的方法来实现这一点,以便我以后可以将feature2和/或feature1引入master。

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

我有更好的方法吗?

2 个答案:

答案 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

现在使用checkout和/ cherry pick来制作分支。这是获取每个提交所需的确切树的更手动方式。有趣的是添加和重置的补丁选项。在这种情况下,git checkout的这种语法也很有用:

 git checkout <some sha1> -- some files

Git为您提供了许多方法来完成您想要的任务。根据您的提交的隔离程度,您可以选择一种方法而不是另一种方法。

答案 1 :(得分:0)

最好是在添加feature2相关代码的任何部分并在其上建立feature2分支之前找到最后一次提交。

如果在f1之后添加了所有f2编辑,一切都很好,你只需要将feature1重置回此提交。

否则(如果部分编辑是混合的),您可以选择创建两个具有相同根的新分支(pure_f1,pure_f2),然后通过cherry-pick来自当前feature1的单个提交构造每个分支。

相关问题