【git系列】git-revert含义用法选项示例详解

本文详细介绍了Git的git-revert命令,用于撤销已有提交并创建新提交记录。内容涵盖git-revert的用途、选项、示例以及提交消息的重要性和策略,帮助读者理解和掌握如何有效使用此命令。

在这里插入图片描述

【git系列】git-revert含义用法选项示例详解

源自专栏《Gradle ScalaTest markdown idea Git中文实用教程目录?》

概要

撤销一些现有的提交

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>…:这是要撤销的提交的哈希值或哈希值的范围。可以是一个具体的提交哈希,或者多个提交之间的范围。

  • -e, --edit:这个选项允许你在提交撤销更改之前编辑提交消息。这在默认情况下是启用的,除非你使用了 --no-edit 选项。

  • -m parent-number, --mainline parent-number:当你在处理一个有多个父提交的提交(例如,由 git merge 创建的合并提交)时,这个选项允许你指定哪个父提交应该被视为主线。这会影响到 git revert 如何生成差异,并最终影响到撤销提交的内容。parent-number 是从 1 开始的。

  • --no-edit:当你不希望编辑提交消息,而是希望使用默认生成的消息时,可以使用这个选项。

  • -n, --no-commit:这个选项会使得 git revert 应用必要的更改到工作目录和索引,但不会创建一个新的提交。这在某些自动化脚本或当你想要手动修改工作目录后再做提交时非常有用。

  • -S[<keyid>], --gpg-sign[=<keyid>]:这个选项允许你使用 GPG 对撤销提交进行签名。如果提供了 <keyid>,则使用指定的密钥进行签名;如果没有提供,则使用你的默认 GPG 密钥。

  • -s, --signoff:这个选项会在提交消息的末尾添加一个 Signed-o

<think>我们正在讨论git revert命令,用户要求详解其作用和使用方法。 根据引用[1]和引用[2]的内容,我们可以总结如下: 作用: git revert 用于撤销某个提交引入的更改,但它不是通过删除提交,而是通过创建一个新的提交来反转指定提交的更改。 这样做的好处是保留了提交历史的完整性,特别适用于已经推送到远程仓库的提交,因为修改历史(如git reset)可能会破坏协作。 使用场景: - 撤销一个错误的提交,且这个提交已经公开(推送到远程仓库)。 - 在公共分支(如master/main)上安全地撤销更改。 基本用法git revert <commit-hash> # 撤销指定的提交 高级用法- 撤销多个非连续的提交:可以一次性指定多个提交进行撤销,但通常建议一个一个地处理以避免冲突。 git revert -n <commit1> <commit2> ... # -n 或 --no-commit 表示不自动提交,这样你可以一次性提交多个撤销 git commit -m "撤销多个提交" - 撤销多个连续的提交:使用区间表示法,注意区间是左开右闭(即不包括起始提交,包括结束提交)。通常我们使用前一个提交到结束提交(即起始提交是结束提交的前一个提交的父提交)?实际上,区间写法是:`<commit1>..<commit2>`,表示从commit1之后(不包括commit1)到commit2(包括commit2)的所有提交。但是注意,revert会按从新到旧的顺序撤销,以避免冲突。但有时可能需要按从旧到新,所以使用-n可以让我们自己控制顺序。 - 取消正在进行的revert操作(比如遇到冲突时): git revert --abort - 处理合并提交的撤销:使用-m选项指定要保留的主线(parent编号,通常为1或2) git revert -m 1 <merge-commit-hash> # 例如,撤销一个合并提交,需要指定保留哪个分支的改动 注意事项: - revert可能会引起冲突,需要手动解决冲突后,使用`git revert --continue`(或者先`git add`解决的文件,然后`git commit`,但如果使用了-n,则只需要手动提交)。 - 默认情况下,revert会打开编辑器让你编辑提交信息,也可以使用`--no-edit`跳过编辑。 示例: 1. 撤销单个提交: git revert a1b2c3d 2. 撤销多个提交(非连续): git revert -n a1b2c3d e4f5g6h # 撤销两个提交,不自动提交 git commit -m "Revert two commits" 3. 撤销连续的提交(从提交A到提交B,注意不包括A,包括B): git revert -n A..B # 注意:A应该比B更早(即A是B的祖先),这里会撤销从A之后到B的所有提交(包括B) # 然后提交 git commit -m "Revert commits from A to B" 4. 撤销合并提交: git revert -m 1 <合并提交的哈希> # 保留主线(通常是合并时所在的分支,即第一个父提交) 引用标识: 我们在回答中会引用引用[1]和引用[2]的内容。 同时,我们也要注意用户之前的问题是关于git log的,现在转向revert,所以不需要再提log。 根据要求,我们需要生成相关问题,放在回答的最后。 回答结构: - 先解释作用 - 使用场景 - 基本语法和常用选项 - 示例 - 注意事项 - 相关问题</think>### Git revert 详解:安全撤销提交的完整指南 `git revert` 是 Git 中用于**安全撤销提交**的核心命令,它通过创建新的提交来反向抵消指定提交的更改,**不会破坏提交历史**(尤其适用于公共分支)。以下是详细解析: --- #### 一、核心作用与原理 1. **安全撤销** - 撤销某次提交的更改,但保留该提交在历史记录中(不重写历史)。 - 生成一个**新的提交**(称为 Revert Commit),内容是指定提交的逆向操作。 - 示例:撤销提交 `a1b2c3d`: ```bash git revert a1b2c3d # 创建新提交,反向应用 a1b2c3d 的改动 ``` [^1][^2] 2. **与 `git reset` 的区别** | **特性** | `git revert` | `git reset` | |------------------|----------------------------|----------------------------| | 历史记录 | 保留原提交,新增 Revert 提交 | 直接删除原提交 | | 适用场景 | 公共分支(如 main) | 本地未推送分支 | | 协作影响 | 安全,不破坏他人历史 | 需强制推送,可能破坏协作 | --- #### 二、关键参数用法 1. **基础撤销** ```bash git revert <commit-hash> # 撤销单次提交 ``` - 自动打开编辑器填写 Revert 提交信息,可用 `--no-edit` 跳过: ```bash git revert --no-edit a1b2c3d ``` 2. **批量撤销多个提交** - **非连续提交**(撤销多个独立提交): ```bash git revert -n commit1 commit2 # -n 表示不自动提交 git commit -m "Revert multiple commits" ``` - **连续提交**(撤销一个区间): ```bash git revert -n older-commit..newer-commit # 左开右闭区间 git commit -m "Revert commit range" ``` [^2] 3. **撤销合并提交** 合并提交有多个父节点,需用 `-m` 指定主线分支: ```bash git revert -m 1 <merge-commit-hash> # -m 1 保留第一个父分支的改动 ``` [^1] 4. **冲突处理** - 遇到冲突时: - 手动解决冲突 → `git add` 标记已解决 → `git revert --continue` - 取消撤销过程: ```bash git revert --abort # 完全放弃本次 revert ``` [^2] --- #### 三、最佳实践场景 1. **修复已推送的错误提交** ```bash git revert bad-commit # 安全生成反向提交 git push origin main # 直接推送,无需强制 ``` 2. **撤销中间历史提交** 例如撤销历史中的某次提交(非最近): ```bash git log --oneline # 查找要撤销的提交哈希 git revert 5a3b2c1 # 撤销指定提交 ``` 3. **临时撤销并测试** ```bash git revert -n HEAD~3 # 撤销最近第3次提交(不自动提交) # 测试代码... git revert --abort # 测试后放弃撤销 ``` --- #### 四、注意事项 1. **顺序问题** - 批量撤销时,Git 默认按**从新到旧**的顺序执行(避免依赖冲突)。 - 手动控制顺序需分步执行 `git revert`。 2. **合并提交风险** - 撤销合并提交可能引入复杂依赖,需明确指定 `-m` 参数[^1]。 3. **替代方案** - 仅本地未推送提交 → 用 `git reset HEAD~1`(不破坏远程历史)。 > **工作流示例**: > ```bash > # 撤销过去3天内的某个错误提交 > git log --since="3 days ago" --oneline # 查找提交哈希 > git revert --no-edit a1b2c3d # 快速撤销 > ``` [^1]: Gitrevert“ 命令详解 [^2]: git reset和git revert详解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值