简体中文 ▾ 主题 ▾ 最新版本 ▾ git-revert 上次更新于 2.50.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”部分。

选项

<commit>

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

-e
--edit

使用此选项,git revert 将允许您在提交撤销之前编辑提交消息。如果您从终端运行命令,这是默认行为。

-m parent-number
--mainline parent-number

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

撤销合并提交声明您永远不想要合并引入的树更改。因此,后续合并只会引入未成为先前已撤销合并祖先的提交所引入的树更改。这可能符合您的预期,也可能不符合。

有关更多详细信息,请参阅 revert-a-faulty-merge 操作指南

--no-edit

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

--cleanup=<mode>

此选项确定在将提交消息传递给提交机制之前如何清理提交消息。有关更多详细信息,请参阅 git-commit[1]。特别是,如果为 <mode> 提供了 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=<strategy>

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

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

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

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

在 rerere 机制使用记录的冲突解决来更新工作树中的文件后,允许它也用解决结果更新索引。--no-rerere-autoupdate 是一个很好的方式来双重检查 rerere 所做的操作,并在使用单独的 git add 将结果提交到索引之前,捕获潜在的错误合并。

--reference

而不是以“This reverts <full-object-name-of-the-commit-being-reverted>.”开头日志消息的正文,请使用“--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 中从第五个提交(包含)到第三个提交(包含)的更改,但不创建包含已撤销更改的任何提交。撤销仅修改工作目录和索引。

讨论

虽然 git 会自动创建一个基本的提交消息,但强烈建议解释为什么原始提交被撤销。此外,反复撤销会产生越来越笨拙的主题行,例如 Reapply "Reapply "<original-subject>""。请考虑将其重写得更短、更独特。

配置

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

revert.reference

将此变量设置为 true 会使 git revert 的行为如同指定了 --reference 选项。

另请参阅

GIT

Git[1] 套件的一部分