简体中文 ▾ 主题 ▾ 最新版本 ▾ git-revert 上次更新于 2.54.0

名称

git-revert - 还原某些现有提交

概要

git revert [--[no-]edit] [-n] [-m <parent-number>] [-s] [-S[<keyid>]] <commit>…​
git revert (--continue | --skip | --abort | --quit)

描述

给定一个或多个现有提交,还原相关补丁引入的更改,并记录一些新的提交来记录这些还原。这要求您的工作树是干净的(没有从 HEAD 提交开始的修改)。

注意:git revert 用于记录一些新的提交,以反转先前提交(通常仅指某个错误的提交)的效果。如果您想丢弃工作目录中所有未提交的更改,请参阅 git-reset[1],特别是 --hard 选项。如果您想提取处于另一个提交状态的特定文件,请参阅 git-restore[1],特别是 --source 选项。请谨慎使用这些替代方案,因为它们都会丢弃工作目录中未提交的更改。

有关这三个命令之间的区别,请参阅 git[1] 中的“Reset、restore 和 revert”部分。

选项

<提交>…​

要还原的提交。有关指定提交名称方式的更完整列表,请参阅 gitrevisions[7]。也可以给出提交集合,但默认情况下不会执行遍历,请参阅 git-rev-list[1] 及其 --no-walk 选项。

-e
--edit

使用此选项,git revert 将允许您在提交还原之前编辑提交信息。如果您从终端运行该命令,这是默认设置。

-m 父编号
--mainline 父编号

通常您无法还原合并,因为您不知道合并的哪一侧应被视为主线。此选项指定主线的父编号(从 1 开始),并允许 revert 相对于指定的父级反转更改。

还原合并提交声明您永远不希望该合并带来的树更改。结果是,以后的合并将仅引入非先前还原合并之祖先的提交所引入的树更改。这可能正是您想要的,也可能不是。

--no-edit

使用此选项,git revert 将不会启动提交信息编辑器。

--cleanup=<模式>

此选项决定在将提交信息传递给提交机制之前如何清理它。有关更多详细信息,请参阅 git-commit[1]。特别地,如果 <模式> 被赋予 scissors 值,则在发生冲突时,在将其传递之前,会将剪刀标记附加到 MERGE_MSG

-n
--no-commit

通常该命令会自动创建一些提交,其中包含说明哪些提交被还原的提交日志信息。此标志将还原指定提交所需的更改应用到您的工作树和索引中,但不进行提交。此外,使用此选项时,您的索引不必与 HEAD 提交匹配。还原是针对索引的起始状态执行的。

当连续还原多个提交对您的索引的影响时,这非常有用。

-S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign

GPG 签名提交。*keyid* 参数是可选的,默认为提交者身份;如果指定,则必须将其紧贴选项,中间无空格。*--no-gpg-sign* 对于抵消 *commit.gpgSign* 配置变量和先前的 *--gpg-sign* 非常有用。

-s
--signoff

在提交信息的末尾添加一行 Signed-off-by 尾注。有关更多信息,请参阅 git-commit[1] 中的 signoff 选项。

--strategy=<策略>

使用给定的合并策略。应仅使用一次。有关详细信息,请参阅 git-merge[1] 中的合并策略 (MERGE STRATEGIES) 部分。

-X<选项>
--strategy-option=<选项>

将合并策略特定的选项传递给合并策略。有关详细信息,请参阅 git-merge[1]

--rerere-autoupdate
--no-rerere-autoupdate

在 rerere 机制对当前冲突重用已记录的解决方案以更新工作区中的文件后,允许它同时使用解决方案的结果更新索引。--no-rerere-autoupdate 是在将结果提交到索引之前,通过单独的 git-add[1] 仔细检查 git-rerere[1] 所做操作并捕获潜在错误合并的好方法。

--reference

不再以“This reverts <被还原提交的完整对象名>.”开头,而是使用 "--pretty=reference" 格式引用提交(参阅 git-log[1])。可以使用 revert.reference 配置变量来默认启用此选项。

序列器子命令

--continue

使用 .git/sequencer 中的信息继续正在进行的操作。可用于在解决 cherry-pick 或 revert 失败后的冲突后继续操作。

--skip

跳过当前提交,并继续执行序列中的其余部分。

--quit

忘记当前正在进行的操作。可用于在 cherry-pick 或 revert 失败后清除序列器状态。

--abort

取消操作并返回到序列开始前的状态。

示例

git revert HEAD~3

还原 HEAD 倒数第四个提交指定的更改,并使用还原的更改创建一个新提交。

git revert -n master~5..master~2

还原 master 倒数第五个提交(包含)到 master 倒数第三个提交(包含)所做的更改,但不创建任何包含还原更改的提交。还原操作仅修改工作树和索引。

讨论

虽然 git 会自动创建基本的提交信息,但强烈建议说明为什么要还原原始提交。此外,反复还原还原会导致主题行变得越来越笨拙,例如 Reapply "Reapply "<original-subject>""。请考虑将这些内容重新措辞为更短且更独特的形式。

配置

本节中以下所有内容均从 git-config[1] 文档中选择性地包含。内容与彼处相同:

revert.reference

将此变量设置为 true 会使 git revert 的行为就像给定了 --reference 选项一样。

另请参阅

GIT

Git[1] 套件的一部分