Git
简体中文 ▾ Topics ▾ Latest version ▾ git-revert last updated in 2.43.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]中的 "重置、恢复和还原"。

选项

<commit>…​

要还原的提交。 更完整的提交名拼写方式,请参见 gitrevisions[7]。 也可以给出提交集,但默认情况下不进行遍历,参见 git-rev-list[1] 及其 `--no-walk`选项。

-e
--edit

有了这个选项,git revert 会让你在提交之前编辑提交信息。如果从终端运行该命令,默认情况下也是如此。

-m 父编号
--mainline parent-number

通常情况下,由于不知道合并的哪一方应被视为主线,因此无法还原合并。 该选项指定了主线的父线编号(从 1 开始),允许还原指令相对于指定的父线反向更改。

还原合并提交就意味着你永远不需要合并带来的目录树变化。 因此,以后的合并只会引入目录树变化,而这些变化不是由先前已还原合并的祖先提交引入的。 这可能是你想要的,也可能不是。

更多详情,请参阅 revert-a-faulty-merge 如何操作

--no-edit

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

--cleanup=<模式>

这个选项决定了提交信息在传递给提交机制之前将如何进行清理。更多细节见 git-commit[1]。特别是,如果 <模式> 的值为 scissors,那么在发生冲突时,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] 中的合并策略部分。

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

将合并策略特有的选项传递给合并策略。 详见 git-merge[1]

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

在 rerere 机制重用当前冲突的记录解析来更新工作树中的文件后,允许它也用解析的结果来更新索引。 --no-rerere-auto-oupdate`是一个很好的方法,在用单独的 `git add 提交结果到索引之前,可以反复检查 rerere 所做的事情,并抓住潜在的错误合并。

--reference

而不是以 “他还原了 <完整的提交对象名称>。” 作为日志信息的开头,而是使用 "--pretty=reference" 格式来引用提交(参见 git-log[1])。 revert.reference 配置变量可用于默认启用此选项。

序列器子命令

--continue

使用`.git/sequencer`中的信息继续进行中的操作。 可以用来在解决拣选或还原失败的冲突后继续执行。

--skip

跳过当前的提交,继续进行队列中其余的命令。

--quit

忽略当前正在进行的操作。 可以用来在拣选或还原失败之后清除序列器的状态。

--abort

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

实例

git revert HEAD~3

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

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

将 master 中倒数第五次提交(包含)到 master 中倒数第三次提交(包含)的改动还原,但不创建任何包含还原改动的提交。还原只会修改工作区和索引。

讨论

虽然 git 会自动创建基本的提交信息,但强烈建议解释为什么要还原原始提交。 此外,反复还原会导致主题行越来越笨重,例如 "Reapply "Reapply "<original subject>""。 请考虑重新措辞,使其更简短、更独特。

配置

Warning

Missing zh_HANS-CN/includes/cmd-config-section-all.txt

See original version for this content.

Warning

Missing zh_HANS-CN/config/revert.txt

See original version for this content.

GIT

属于 git[1] 文档

scroll-to-top