在git中恢复一系列的提交

我怎样才能在git中恢复一系列的提交? 从看gitrevisions文档,我看不到如何指定我需要的范围。 例如:

A -> B -> C -> D -> E -> HEAD 

我想做的相当于:

 git revert BD 

其结果是:

 A -> B -> C -> D -> E -> F -> HEAD 

其中F包含BD的相反。

你使用的是什么版本的Git?

仅在Git1.7.2 +中支持恢复多个提交:请参阅“ 使用多次恢复回滚到旧提交 ”以获取更多详细信息。
当前的git revert手册页仅适用于当前的 Git版本(1.7.4+)。


正如OP Alex Spurling在评论中所报道的那样:

升级到1.7.4工作正常。
要回答我自己的问题,这是我正在寻找的语法:

 git revert B^..D 

请注意,每个恢复的提交是分开提交的。

Henrik N在评论中澄清:

 git revert OLDER_COMMIT^..NEWER_COMMIT 

如下所示,您可以立即恢复而无需提交:

 git revert -n OLDER_COMMIT^..NEWER_COMMIT git commit -m "revert OLDER_COMMIT to NEWER_COMMIT" 

git revert OLDER_COMMIT^..NEWER_COMMIT没有为我工作,我用git revert -n OLDER_COMMIT^..NEWER_COMMIT和一切都很好,我使用git 1.7.9.6版本。

如果你想在一次提交中将范围B提交到D(至less在git版本2中),你可以这样做

  git revert -n B^..D 

这将从B的父提交(排除)提交所做的更改还原为D提交(包含),但不会创build任何提交的已还原更改。 回复只修改工作树和索引。

不要忘记在之后进行修改

  git commit -m "revert commit range B to D" 

您也可以使用相同的方法在单个提交中还原多个不相关的提交。 例如回复B和D而不是C

  git revert -n BD git commit -m "Revert commits B and D" 

参考: https : //www.kernel.org/pub/software/scm/git/docs/git-revert.html

感谢Honza Haering的纠正

使用git rebase -i将相关的提交压缩成一个。 然后你只需要一次提交即可恢复。