如何恢复 git 中的一系列提交?通过查看gitrevisions文档,我看不到如何指定我需要的范围。例如:
A -> B -> C -> D -> E -> HEAD
我想做相当于:
git revert B-D
结果将是:
A -> B -> C -> D -> E -> F -> HEAD
其中 F 包含 BD 的倒数。
如何恢复 git 中的一系列提交?通过查看gitrevisions文档,我看不到如何指定我需要的范围。例如:
A -> B -> C -> D -> E -> HEAD
我想做相当于:
git revert B-D
结果将是:
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
B^
表示“B 的第一个父提交”:允许包含B
在还原中。
请参阅“ git rev-parse
SPECIFYING REVISIONS 部分”,其中包括<rev>^
, 例如HEAD^
语法:在“插入符号 ( ^
) 字符是什么意思? ”中查看更多信息)
请注意,每个还原的提交都是单独提交的。
git revert OLDER_COMMIT^..NEWER_COMMIT
如下所示,您可以在不立即提交的情况下还原:
git revert -n OLDER_COMMIT^..NEWER_COMMIT
git commit -m "revert OLDER_COMMIT to 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 OLDER_COMMIT^..NEWER_COMMIT
对我没有用。
我用过git revert -n OLDER_COMMIT^..NEWER_COMMIT
,一切都很好。我正在使用 git 版本1.7.9.6
。
用于git rebase -i
将相关提交压缩为一个。然后你只有一个提交来恢复。