如何在git中还原一系列提交?通过查看gitrevisions文档,我看不到如何指定所需的范围。例如:
A -> B -> C -> D -> E -> HEAD
我想做相当于:
git revert B-D
结果将是:
A -> B -> C -> D -> E -> F -> HEAD
其中F包含BD的反数(含BD)。
如何在git中还原一系列提交?通过查看gitrevisions文档,我看不到如何指定所需的范围。例如:
A -> B -> C -> D -> E -> HEAD
我想做相当于:
git revert B-D
结果将是:
A -> B -> C -> D -> E -> F -> HEAD
其中F包含BD的反数(含BD)。
Answers:
您正在使用哪个版本的Git?
仅在Git1.7.2 +中支持还原多个提交:有关更多详细信息,请参见“ 使用还原多次回滚到旧提交。 ”。
当前的git revert
手册页仅适用于当前的 Git版本(1.7.4+)。
正如OP Alex Spurling在评论中所述:
升级到1.7.4可以正常工作。
为了回答我自己的问题,这是我想要的语法:
git revert B^..D
B^
表示“ B的第一个父提交”:允许包含B
在还原中。
请参阅“ git rev-parse
规范修订版”部分,其中包括<rev>^
,例如HEAD^
语法:请参见“ 插入号(^
)字符是什么意思? ”中的更多内容。)
请注意,每个还原的提交都是单独提交的。
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
^
修订版参数的后缀表示该提交对象的第一个父级”。
如果您想在一次提交中将提交范围B还原为D(至少在git版本2中),则可以执行
git revert -n B^..D
这会将提交所做的更改从B的父提交(排除)还原到D提交(包括),但不会使用还原后的更改创建任何提交。还原仅修改工作树和索引。
之后不要忘记提交更改
git commit -m "revert commit range B to D"
您也可以使用相同的方法在单个提交中还原多个不相关的提交。例如还原B和D但不还原C
git revert -n B D
git commit -m "Revert commits B and D"
参考:https : //www.kernel.org/pub/software/scm/git/docs/git-revert.html
git revert -n B..D
不还原提交B,仅git revert -n B^..D
还原C和D。也 还原B。
git revert -n master~5..master~2
,则表示包含了第五次最新提交。但master~5
实际上是第六次最新提交。有关符号的详细信息,请参见git docs中的版本选择..
:-)
这样git revert OLDER_COMMIT^..NEWER_COMMIT
做对我没有用。
我用过git revert -n OLDER_COMMIT^..NEWER_COMMIT
,一切都很好。我正在使用git version 1.7.9.6
。
-n
或--no-commit
选项会恢复在一个单一的所有跨范围的变化犯,而不是创建一个还原承诺在范围内的所有承诺。最终结果相同,因为相同的更改将被还原。只取决于您希望git历史如何。
用于git rebase -i
将相关的提交压缩为一个。然后,您只需提交一次即可还原。