我正在从其他人的存储库中删除更改(让我们称之为'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
也会提交dev
和stuff
,这可能会破坏事情。
我需要能够在没有大量麻烦的情况下从1
进行更改(并且,如果可能的话,不会让1和2回到那里直到他们出现在上游),并让他们进行更改来自我,没有任何东西可以归还或删除。
我该怎么做?或者我只是坚持2
中的1和2?
答案 0 :(得分:1)
在这种情况下,我建议将过去保留原样,并在将来尝试做得更好。
从b
中取出c
和dev
并仅在stuff
中使用它们有什么好处?由于stuff
在dev
后被c
分支,所以提交都包含在stuff
中。
我很想偶尔做这些事情,但通常我最终会想到那又怎么样?当我学习Git并从SVN切换时,特别是那些提交的情况。有些不对劲。好的。但它的确有效。所以不要碰它。
版本控制是一种工具,本身并不是目的。你在回购中加了一些代码。这是珍贵的事情。不是 - 也许 - 混合回购的历史。
您可以在本地修复分支,但是当从上游合并回来或推送更改时,您将遇到麻烦。
答案 1 :(得分:1)
所以基本上,你想要一个私有版本的stuff
还原1
和2
,但是你自己的stuff
的公开版本仍然包含它以供gitnoob拉从。没有无缝的方法可以做到这一点,但实现它的一种方法是引入一些新的分支:
...d-f <---stuff-upstream
\
g <---reverted-stuff
\
h <---my-stuff
您所做的是创建一个reverted-stuff
分支,以恢复1
和2
。如果您要进行与gitnoob共享的更改,请从reverted-stuff
分支到my-stuff
。在my-stuff
上正常更改和提交。您也应该能够将dev
合并到my-stuff
中。
当您准备好分享更改时,请使用my-stuff
将stuff-upstream
重新绑定到git rebase --onto stuff-upstream reverted-stuff my-stuff
。这将删除g
中的恢复,并使my-stuff
直接从stuff-upstream
分支,让gitnoob无需担心。
当您从gitnoob拉出时,请进入stuff-upstream
,然后将其合并到reverted-stuff
。该合并将自动重新应用g
,您还原1
和2
。然后,您可以从my-stuff
分支新的reverted-stuff
。
话虽这么说,如果1
和2
真的像你说的那样有问题,那么你也可以通过将gitnoob从他的分支中取出来做帮助。如果不是那么糟糕,那么就没有理由去解决这一切。