Git 怎么 revert 提交?如何回退到指定版本?

文章导读
Previous Quiz Next git revert 命令会创建一个新的 commit,用于撤销指定先前 commit 的更改,而不会改变 commit 历史。
📋 目录
  1. 注意事项
  2. 语法
  3. 选项
A A

Git Revert



Previous
Quiz
Next

git revert 命令会创建一个新的 commit,用于撤销指定先前 commit 的更改,而不会改变 commit 历史。

  • 它经常用于撤销修改,同时保持项目的过去历史完整。

  • 在共享仓库中撤销更改时,此命令比 git reset 更安全。

注意事项

git revert 命令之前,有一些关键点需要记住:

  • 执行命令前,确保工作树是干净的。

  • 使用 git reset --hard 删除未提交的更改,使用 git restore --source 从较早的 commit 恢复特定文件。

  • 任一选项都会从目录中移除任何未提交的工作。

语法

git revert <commit>

选项

git revert 命令具有以下选项:

<commit>

  • <commit> 表示您想要 revert 的提交。

  • 您可以一次性指定多个要 revert 的提交。

  • 使用 git-rev-list 配合 --no-walk 选项,可以遍历提交集,这不是默认行为。

-e

--edit

  • 您可以在完成 revert 之前,使用 git revert 命令中的 -e--edit 选项更改提交消息。

  • 在终端执行命令时,此选项默认启用。

  • 您可以根据需要修改 revert 提交消息。

-m parent-number

--mainline parent-number

  • 在 Git 中,-m parent-number 选项指定在 merge reversal 时使用 merge commit 的哪个 parent 作为 mainline

  • 通过选择 parent 编号(从 1 开始),您可以指定 merge 的哪一边作为 revert 修改的参考。

  • 通过移除被 revert 的 merge 的祖先中的更改,revert 一个 merge commit 本质上会丢弃该 merge 过程中所做的更改。

  • 这可能会影响后续的 merge。

--no-edit

  • git revert 命令中使用 --no-edit 选项时,Git 不会打开提交消息编辑器。

  • 使用此选项时,Git 会回退到自动生成的提交消息。

  • 不需要用户输入或修改。

--cleanup=<mode>

  • 在提交更改之前,Git 会根据 --cleanup=<mode> 选项格式化和清理提交消息。

  • 您可以将 <mode> 设置为您想要的任何值,例如 scissors,在发生冲突时会在 MERGE_MSG 中添加 scissors 行。

-n

--no-commit

  • 在 Git 中,使用 -n--no-commit 选项,可以将 revert 更改应用到工作树和 index,而不产生提交。

  • 这允许您在最终确定之前查看或编辑更改,并按顺序回滚多个提交。

-S[<keyid>]

--gpg-sign[=<keyid>]

--no-gpg-sign

  • 使用 -S[<keyid>]--gpg-sign[=<keyid>] 选项,可以使用 GPG 密钥对提交进行签名。

  • 您可以省略 <keyid> 参数,但如果省略,它必须紧跟在选项后面,没有空格,并指定使用哪个 GPG 密钥。

  • 如果没有提供密钥,默认使用提交者的身份密钥。

  • 使用 --no-gpg-sign 选项会禁用提交的 GPG 签名,从而覆盖任何允许自动签名的全局设置或之前使用的 --gpg-sign 选项。

-s

--signoff

  • 使用 -s--signoff 选项时,提交消息会添加 Signed-off-by 行。

  • 此行通常用于遵守项目的贡献要求,包含提交者的姓名和电子邮件地址,并表示他们对更改负责。

--strategy=<strategy>

  • 使用 --strategy=<strategy> 选项指定合并分支时使用的 merge strategy。

  • Git 使用此选项决定如何解决冲突并合并来自不同分支的更改,因此每个 merge 命令只能使用一次。

-X<option>

--strategy-option=<option>

  • 使用 -X<option>--strategy-option=<option> 选项,可以为正在使用的合并策略提供额外的、特定于策略的参数。

  • 这根据所选策略的选择为您提供对 merge 执行的细粒度控制。

--rerere-autoupdate

--no-rerere-autoupdate

  • 使用 --rerere-autoupdate 选项,Git 可以自动使用记录的冲突解决结果更新 index。

  • 使用 --no-rerere-autoupdate,您可以在手动将解决结果添加到 index 之前,在工作树中审查和确认它。

--reference

  • --reference 选项通过更简洁的方式引用原始提交来更改 revert commit 的 log 消息主体。

  • --pretty=reference 格式指定了一个更短的引用格式,用于替换默认消息格式 This reverts <full-object-name-of-the-commit-being-reverted>

  • 通过使用 revert.reference 配置设置,可以将此行为设为默认。

总结来说,git revert 命令会创建一个新提交来逆转之前提交的更改。它在共享仓库中使用是安全的,因为它不会更改提交历史。上述选项提供了更大的灵活性,例如不提交即可 revert,以及处理 merge commit。