在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
将相关的提交压缩成一个。 然后你只需要一次提交即可恢复。