如何恢复与许多其他提交合并的提交,而不会丢失其中的提交(Azure Devops)



我对GIT的经验很少,所以我的问题听起来可能有点奇怪。我们有一个Azure Devops仓库,每天都有提交。

9月3日,我们的Azure Devops存储库发生了一些变化。这是承诺,但从未被推动过。从那以后,开发人员就不在了,在过去的两个月里,发生了很多提交。然后,在10月21日,9月3日的提交与其间的所有提交合并并最终推送。

是否有一种方法可以恢复合并的提交(发生在10月21日)和提交本身(发生在9月3日)而不丢失两者之间的所有提交?

这发生在Azure Devops中,提交和推送主要通过Visual Studio 2019进行。

正如@RomainValeri在评论中指出的,git revert命令就是你在这里要找的。

首先,让我们想象一下情况:

o---o---o---o---o---X---M
                 /
A----------------

这里,提交A是9月3日的提交,M是10月21日的合并提交。

您提到您只想从包含M的分支中恢复A引入的更改。您可以使用以下命令恢复合并提交M:

git revert -m 1 M

其中M是指向合并提交的引用。

现在,由于合并提交有两个或更多的父节点,您还需要告诉Git它应该使用哪个父节点作为基线,以确定应该恢复哪些更改。这就是-m(--mainline)选项的作用。在这种情况下,我们希望目标分支(即A被合并到的分支)作为基线,所以我们说-m 1,也就是的第一个父

这将在新提交W:

中应用M的第一个父节点(在本例中为X)和A之间的差异的反向。
o---o---o---o---o---X---M---W
                 /
A----------------

通常将合并提交的反向称为W,因为它看起来像颠倒的M

请记住,恢复合并提交会撤销更改,但它不会撤销历史记录。换句话说,Git仍然会认为与M合并的分支是合并的,即使在W之后。如果你试图再次合并它,Git会告诉你所有内容都是最新的

所以,如果你想在将来再次合并同一个分支,你必须先恢复这个恢复。请查看Git文档中的how-to,了解如何做到这一点。

最新更新