如何在本地“清理”分支机构,而不是为其他人打破一切?

时间:2012-08-23 17:13:16

标签: git branch

我正在从其他人的存储库中删除更改(让我们称之为'gitnoob',因为这些因素已经混淆了)。他们最初在他们的主要分支中工作,然后了解分支机构。看起来有点像这样:

                  d - f <--- stuff
                 /   /
A - b - 1 - c - 2 - E <--- dev

这些数字应该是另一个分支中的提交,如果我将它们合并到我自己的dev分支中,可能会破坏它们。 (稍后我会将它们从upstream/dev中拉出来 - upstream作为我们的共享父存储库 - 一旦它们合并在那里。)小写字母是应该属于{{1}的一部分的提交并且大写的提交合法地合并到stuff

理想情况下,我想在我的最后清理它 - 在本地有类似的东西:

dev

现在, b - c - d - f <--- stuff / / A --------- E <--- dev 包含所有与stuff相关的更改,无论如何都会发生,因为stuff还会包含gitnoob/stuff和{{1}之间的所有差异到那一点(合法的upstream/dev已经在我的gitnoob/dev分支中)。问题是,这意味着dev也会提交devstuff,这可能会破坏事情。

我需要能够在没有大量麻烦的情况下从1进行更改(并且,如果可能的话,不会让1和2回到那里直到他们出现在上游),并让他们进行更改来自我,没有任何东西可以归还或删除。

我该怎么做?或者我只是坚持2中的1和2?

2 个答案:

答案 0 :(得分:1)

在这种情况下,我建议将过去保留原样,并在将来尝试做得更好。

b中取出cdev并仅在stuff中使用它们有什么好处?由于stuffdev后被c分支,所以提交都包含在stuff中。

我很想偶尔做这些事情,但通常我最终会想到那又怎么样?当我学习Git并从SVN切换时,特别是那些提交的情况。有些不对劲。好的。但它的确有效。所以不要碰它。

版本控制是一种工具,本身并不是目的。你在回购中加了一些代码。这是珍贵的事情。不是 - 也许 - 混合回购的历史。

您可以在本地修复分支,但是当从上游合并回来或推送更改时,您将遇到麻烦。

答案 1 :(得分:1)

所以基本上,你想要一个私有版本的stuff还原12,但是你自己的stuff的公开版本仍然包含它以供gitnoob拉从。没有无缝的方法可以做到这一点,但实现它的一种方法是引入一些新的分支:

...d-f <---stuff-upstream
      \
       g <---reverted-stuff
        \
         h <---my-stuff

您所做的是创建一个reverted-stuff分支,以恢复12。如果您要进行与gitnoob共享的更改,请从reverted-stuff分支到my-stuff。在my-stuff上正常更改和提交。您也应该能够将dev合并到my-stuff中。

当您准备好分享更改时,请使用my-stuffstuff-upstream重新绑定到git rebase --onto stuff-upstream reverted-stuff my-stuff。这将删除g中的恢复,并使my-stuff直接从stuff-upstream分支,让gitnoob无需担心。

当您从gitnoob拉出时,请进入stuff-upstream,然后将其合并到reverted-stuff。该合并将自动重新应用g,您还原12。然后,您可以从my-stuff分支新的reverted-stuff

话虽这么说,如果12真的像你说的那样有问题,那么你也可以通过将gitnoob从他的分支中取出来做帮助。如果不是那么糟糕,那么就没有理由去解决这一切。