如何恢复git中的一系列提交?从查看gitrevisions文档,我看不到如何指定我需要的范围。例如:恢复git中的一系列提交
A -> B -> C -> D -> E -> HEAD
我想做的相当于:
git revert B-D
它的结果将是:
A -> B -> C -> D -> E -> F -> HEAD
其中F包含B-d包容性的逆转。
如何恢复git中的一系列提交?从查看gitrevisions文档,我看不到如何指定我需要的范围。例如:恢复git中的一系列提交
A -> B -> C -> D -> E -> HEAD
我想做的相当于:
git revert B-D
它的结果将是:
A -> B -> C -> D -> E -> F -> HEAD
其中F包含B-d包容性的逆转。
你使用的是什么版本的Git?
仅在Git1.7.2 +中支持多个提交才能恢复:有关更多详细信息,请参阅“Rollback to an old commit using revert multiple times.”。
当前git revert
man page仅针对当前 Git版本(1.7.4+)。
正如评论OP Alex Spurling报告:
升级到1.7.4工作正常。
要回答我的问题,这是我一直在寻找的语法:
git revert B^..D
B^
指“第一父提交B的”:即允许包括在复归B
。
见“git rev-parse
SPECIFYING REVISIONS section”,其中包括了<rev>^
, e.g. HEAD^
语法:多见于“What does the caret (^
) character mean?”)
注意,每个回复提交单独提交。
git revert OLDER_COMMIT^..NEWER_COMMIT
如下图所示,你可以不提交马上回复:
git revert -n OLDER_COMMIT^..NEWER_COMMIT
git commit -m "revert OLDER_COMMIT to NEWER_COMMIT"
谢谢那就是答案。升级到1.7.4可以正常工作。为了回答我自己的问题,这是我正在寻找的语法: git revert B^.. D – 2011-02-14 14:56:14
@Alex:太棒了!我已将您的评论纳入我的回答。 – VonC 2011-02-14 15:04:18
使用git rebase -i
壁球相关的提交到一个。然后你只需要一次提交即可恢复。
做git revert OLDER_COMMIT^..NEWER_COMMIT
我没有工作,我用git revert -n OLDER_COMMIT^..NEWER_COMMIT
,一切都很好,我使用Git版本1.7.9.6
。
如果要恢复承诺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
迈向gitrevisions(7)页的端部,有为首的部分“指定覆盖范围”。你想要什么与那里描述的不同? – 2011-02-14 11:30:43
gitrevisions页面显示'git revert A..D'会做我想做的事。但是,当我尝试,我得到的错误“致命的:无法找到'A..D'” – 2011-02-14 11:36:48
[Git恢复多个提交](http://www.singhajit.com/git-revert-multiple-commits/) – 2016-02-11 18:50:23