## 命名

git-revert - 恢复一些现有的提交

## 概要

    git revert [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<keyid>]] <commit>…

    git revert --continuegit revert --quit

    git revert --abort

## 描述

给定一个或多个现有的提交，恢复相关修补程序引入的更改，并记录一些记录它们的新提交。这要求你的工作树是干净的（不需要修改 HEAD 提交）。

注意：`git revert`用于记录一些新的提交以反转一些早期提交的影响（通常只是错误的提交）。如果你想扔掉工作目录中所有未提交的更改，你应该看到 git-reset [1]，特别是`--hard`选项。如果你想提取特定文件，就像在另一个提交中那样，你应该看到 git-checkout [1]，特别是`git checkout <commit> -- <filename>`语法。请谨慎使用这些替代方法，因为它们都会丢弃工作目录中的未提交更改。

## 选项

<commit>…

承诺恢复。有关拼写提交名称的更完整列表，请参阅 gitrevisions [7]。提交集也可以给出，但默认情况下不进行遍历，参见 git-rev-list [1] 及其`--no-walk`选项。

-e --edit

使用此选项，`git revert`将允许您在提交还原之前编辑提交消息。如果您从终端运行命令，这是默认值。

-m parent-number --mainline parent-number

通常您无法恢复合并，因为您不知道合并的哪一方应被视为主线。此选项指定主线路的父代号码（从1开始），并允许还原以相对于指定的父代的相反更改。

恢复合并提交声明您将永远不希望合并引入的树更改。因此，稍后的合并只会引入不是先前还原合并的祖先的提交引入的树更改。这可能是也可能不是你想要的。

有关更多详细信息，请参阅恢复错误合并的方法。

--no-edit

使用此选项，`git revert`将不会启动提交消息编辑器。

-n --no-commit

通常，该命令会自动创建一些提交日志消息，提交哪些提交已恢复。此标志应用必要的更改以将命名的提交恢复到您的工作树和索引，但不进行提交。此外，使用此选项时，您的索引不必与 HEAD 提交匹配。回复是针对索引的开始状态完成的。

将多个提交的效果还原为连续的索引时，这非常有用。

-S<keyid> --gpg-sign=<keyid>

GPG 标志提交。该`keyid`参数是可选的，并且默认为提交者身份; 如果指定，它必须粘贴到选项没有空格。

-s --signoff

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

--strategy=<strategy>

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

-X<option> --strategy-option=<option>

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

## Sequencer子命令

--continue

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

--quit

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

--abort

取消操作并返回到预序列状态。

## 例子

`git revert HEAD~3`

恢复 HEAD 中最后第四次提交指定的更改，并使用恢复的更改创建一个新的提交。

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

将提交完成的更改从 master（包含）中的第五次提交恢复为 master（包含）中的第三次提交，但不要使用已还原的更改创建任何提交。恢复只修改工作树和索引。