--distributed-is-the-new-centralized
English ▾ 主题 ▾ 最新版本 ▾ git-revert 上次更新于 2.44.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 and revert"。

选项

<commit>…​

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

-e
--edit

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

-m parent-number
--mainline parent-number

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

还原合并提交声明你永远不希望合并引入的树更改。 因此,以后的合并只会引入不是先前还原的合并的祖先的提交引入的树更改。 这可能不是你想要的。

有关更多详细信息,请参阅 revert-a-faulty-merge How-To

--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 是一种很好的方法,可以在使用单独的 git add 将结果提交到索引之前,仔细检查 rerere 所做的事情并捕获潜在的错误合并。

--reference

不要以 "This reverts <full-object-name-of-the-commit-being-reverted>." 开始日志消息的正文,而是使用 "--pretty=reference" 格式(参见 git-log[1])引用提交。 可以使用 revert.reference 配置变量默认启用此选项。

SEQUENCER 子命令

--continue

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

--skip

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

--quit

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

--abort

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

示例

git revert HEAD~3

还原 HEAD 中倒数第四次提交指定的更改,并创建一个包含还原更改的新提交。

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

还原由 master 中倒数第五次提交(包括)到 master 中倒数第三次提交(包括)所做的更改,但不创建任何包含还原更改的提交。 还原只会修改工作树和索引。

讨论

虽然 git 会自动创建一个基本的提交信息,但强烈建议说明为什么要还原原始提交。 此外,重复还原操作会导致主题行越来越冗长,例如重新应用 "重新应用 "<原始主题>""。 请考虑将这些重述为更短且更唯一的形式。

配置

本节中此行下方的所有内容均有选择地从 git-config[1] 文档中包含。 内容与在那里找到的内容相同。

revert.reference

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

GIT

属于 git[1] 套件的一部分

scroll-to-top