Git - 如何从原点删除作品,但稍后从另一个分支合并回来?

时间:2017-05-03 22:18:09

标签: git merge

我有一个主分支,其中包含一系列不会被释放的功能。我被要求从master中删除这些功能并创建一个包含它们的新分支,以便我们稍后可以合并回master。

我采取的步骤是:

  1. 创建一个名为" NewFeatures"
  2. 回到主人,删除所有违规代码(提交数月,数百) 手
  3. 提交删除主人
  4. 期望是我会继续努力并且#34; NewFeatures"并定期将master合并到" NewFeatures"所以当我合并回来时,它是无缝的。

    现在,当我想保留" NewFeatures"最新的master,master想要删除NewFeatures中的所有代码。

    我的问题是,用Git完成的正确方法是什么"从master中删除一堆功能并将它们放到另一个分支中以便稍后合并"?

    更新 谢谢你的回复。我制作了一张有希望解释事物的图表。最大的问题是,在从main到feature的第一次合并(第二行的第一个xy)中,主分支想要删除所有y,因为我删除了所有y。

    - y - x - y - (remove y's) - x - x - (release x)-x - x - xy - xy - xy - (release xy) \ \ \ / y - y - y - y - y - xy - y - y - xy - (done)

    更新2 我最后将分支移动到刚刚从main中删除NewFeature(但我已经删除了已删除的文件)然后将已删除的文件复制回来。这样,main可以合并到NewFeature而不会杀死东西,NewFeature可以合并回来成为主要没有问题。我丢失了一些提交日志跟踪,但它似乎比接下来三天的挑选文件更好。

    下面的帮助似乎是正确的方法,但这种方式似乎对我来说足够好了(讨论引导我走向我最终做到的方式,所以谢谢你们)。

    谢谢, 布赖恩

2 个答案:

答案 0 :(得分:3)

我相信您需要做的是从现有的master分支创建两个分支。一个包括应该进入master的提交,另一个包括仅包含new-feature工作的提交。

我做了一个快速图表来说明我的意思。目前你有这样的东西(最新提交在顶部):

*   - Master work
|
*   - New feature work
|
*   - Master work
|
*   - New feature work
|
*   - Master work
|
*   - New feature work
|
*   - Common commit

你需要到达这里:

*       - Master work
|
|  *    - New feature work
|  |
*  |    - Master work
|  |
|  *    - New feature work
|  |
*  |    - Master work
|  |
|  *    - New feature work
| /
|/
*       - Common commit

在两个分支中没有重复提交非常重要,因为这可能会在您稍后合并时导致问题。

您可以使用git rebase来实现这一目标,但是如果您说有数百个提交,那么您将无法享受好时光,因为您必须单独审核每个提交。< / p>

答案 1 :(得分:2)

您基本上要问的问题是如何从其他分支机构获取提交并将其带入新功能分支,而不会消除您的更改。假设这些提交未触及与您更改的文件相同的文件,则solution已在另一个question中提供。

这是对方答案的要点:

# wss-starting-point is the SHA1/branch immediately before the first 
commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase

使用他原来的答案作为参考。我希望这有帮助!