如何在git中恢复一系列提交?通过查看gitrevisions文档,我不知道如何指定所需的范围。举例来说:
A -> B -> C -> D -> E -> HEAD
字符串
我想做的事情相当于:
git revert B-D
型
其中结果将是:
A -> B -> C -> D -> E -> F -> HEAD
型
其中F包含B-D的逆,包括B-D在内。
如何在git中恢复一系列提交?通过查看gitrevisions文档,我不知道如何指定所需的范围。举例来说:
A -> B -> C -> D -> E -> HEAD
字符串
我想做的事情相当于:
git revert B-D
型
其中结果将是:
A -> B -> C -> D -> E -> F -> HEAD
型
其中F包含B-D的逆,包括B-D在内。
4条答案
按热度按时间jvlzgdj91#
你用的是什么版本的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工作正常。
为了回答我自己的问题,这是我正在寻找的语法:
字符串
B^
表示“B的第一个父提交”:这允许在回复中包括B
。参见“
git rev-parse
规范修订部分”,其中包括<rev>^
,例如HEAD^
语法:更多内容见“What does the caret (^
) character mean?”)请注意,每个恢复的提交都是单独提交的。
Henrik N在评论中澄清:
型
如下所示,您可以在不立即提交的情况下进行还原:
型
cig3rfwq2#
如何通过 * 一次 * revert commit来恢复一系列提交**
如果你想在一次提交中将提交范围B恢复到D(至少在git version 2中),你可以这样做:
字符串
-n
(或--no-commit
)参数告诉git将从B的父提交(排除)开始的提交所做的更改恢复到D提交(包含),但 * 不 * 创建任何具有恢复的更改的提交。恢复只修改工作树(活动文件系统)和索引(暂存文件部分)。在运行
git revert -n
之后,不要忘记提交更改:型
您还可以使用相同的方法在单个提交中还原多个不相关的提交。举例来说:还原B和D,但不还原C:
型
参考文献:
1.感谢Honza Haering的更正。
1.从
man git revert
:-n
、--no-commit
通常,该命令会自动创建一些提交,并带有提交日志消息,说明哪些提交被恢复。此标志应用将命名提交还原到工作树和索引所需的更改,但不进行提交。此外,当使用此选项时,索引不必与
HEAD
提交匹配。还原是根据索引的开始状态完成的。这在将多个提交的效果恢复到一行中的索引时很有用。
balp4ylt3#
git revert OLDER_COMMIT^..NEWER_COMMIT
不适合我。我用了
git revert -n OLDER_COMMIT^..NEWER_COMMIT
,一切都很好。我使用的是git版本1.7.9.6
。bakd9h0s4#
使用
git rebase -i
将相关提交压缩为一个。然后你只有一个提交要恢复。