我有一个我一直在使用的git分支,名为feature1,带有已提交的代码。我意识到我想将一些新功能拆分为一个名为feature2的新分支,并从feature1中删除该功能,以便在功能之间保持清晰的分离。
我一直试图想出一个很好的方法来实现这一点,以便我以后可以将feature2和/或feature1引入master。
我想到的解决方案是创建基于feature1的feature2分支,然后从feature1中删除与feature2相关的代码。我担心这样做是因为如果feature2首先合并为master,那么feature1之后会合并,“删除”会从master中删除feature2代码吗?
我有更好的方法吗?
答案 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
的单个提交构造每个分支。