我有以下情况:
master A - B - E
/
second C - D - F
从主分支恢复“第二个分支”的所有提交的最佳解决方案是什么?
“第二个”分支有大约 70 次提交。
我有以下情况:
master A - B - E
/
second C - D - F
从主分支恢复“第二个分支”的所有提交的最佳解决方案是什么?
“第二个”分支有大约 70 次提交。
您应该看一下我为稍微不同的问题提供的答案,该问题涉及恢复合并提交。“恢复合并与重置合并”。这将解释 revert 是如何工作的,以及 reset 对于合并提交是如何工作的。在这种情况下,有人已经恢复,但在想要撤消恢复后出现了一些奇怪的行为 - 因此请在阅读此答案后查看,以便全面了解它的工作原理。
在推送提交后使用git-reset
意味着您已经更改了其他人已经拥有的历史记录,这很糟糕。如果你重置,你实际上是在倒回历史。要推动这一点,您需要执行forced push
. 然后其他开发人员将需要知道使用git-fetch
后跟,如果他们在您删除的合并提交后有新的提交git reset --hard origin/master
,他们甚至可能需要执行复杂的操作。git rebase --onto
否则,他们最终只会推送您刚刚重置的相同提交。
修改已经推送的历史通常是个坏主意。
使用git revert
创建一个新的提交,它否定合并提交的内容而不是倒回它。它使您在历史中前进,而不是修改历史。
git revert E
还原该合并提交后,您将拥有以下历史记录...
master A - B - E - G
/
/
second C - D - F
G
提交代表还原。该提交“撤消”了合并引入的更改。还原合并提交时需要注意一些问题。请阅读我关于“恢复合并与重置合并”的回答,了解它是如何工作的,以及以后如何撤消恢复。
我假设'E'是一个合并提交。有两种简单的方法可以做到这一点。一种是从分支master重置您的最后一次提交:
git checkout master
git reset --hard HEAD^
我不推荐这样做,因为这会从你的主分支中删除最后一次提交。
现在第二个选项是恢复提交:
git checkout master
git revert HEAD -m 1 M
您必须通过-m选项,因为 'E' 是合并提交。这将创建一个新的提交来还原所做的更改。我建议您先在存储库的副本上尝试此操作。此外,如果您正在与其他开发人员合作,最好不要重写历史。第一种方法重写历史,所以我建议你使用第二种方法。
另外,请检查以下链接:
希望能帮助到你!
要还原它,很容易,commit E 是第二个分支中所有提交的合并提交,要做的就是删除 E(合并提交),然后在 master 分支中,第二个分支就没有更多的东西了。
然后就可以了。
第二个分支中的所有内容仍将保留。对于主分支,第二个分支没有更多的东西。