文章摘要
加载中...|
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结 投诉

概述

git revert 是 Git 中用于安全撤销提交的命令,通过创建一个新的提交来撤销指定提交的更改,而不是直接删除历史记录。适用于已推送到远程仓库的提交撤销,可保持历史记录完整性和团队协作的稳定性。

基本用法

撤销单个提交

bash
git revert <commit-hash>  # commit-hash 为目标提交的哈希值

撤销多个提交

bash
git revert <hash1> <hash2> <hash3>  # 同时撤销多个提交(按提交顺序从新到旧)

撤销连续提交

bash
git revert A^..B  # 撤销从 A 到 B 的连续提交(包含 A,不包含 B)

常用选项

选项说明
-n, --no-commit撤销更改但不自动提交,需手动执行 git commit 完成
-e, --edit应用撤销前编辑提交信息(默认会打开编辑器)
--no-edit使用默认提交信息,不打开编辑器
-m <parent-number>处理合并提交时,指定保留第几个父提交的历史(合并提交必用)
--continue解决冲突后继续执行 revert 过程
--abort放弃当前 revert 操作,恢复到操作前状态
--quit退出 revert 模式,但保留已应用的更改(不推荐新手使用)
-s, --signoff在提交信息末尾添加签名行

工作流程示例

场景:撤销 main 分支的提交 abc123

  1. 确认要撤销的提交

    bash
    git log --oneline  # 查看提交历史,确认提交哈希
  2. 执行 revert

    bash
    git revert abc123
  3. 处理冲突(若有)

    • 冲突时命令会暂停,需手动修改冲突文件

    • 解决后标记为已解决

      bash
      git add <冲突文>
    • 继续执行 revert

      bash
      git revert --continue
    • 若需放弃操作

      bash
      git revert --abort
  4. 推送到远程仓库

    bash
    git push origin main

场景:撤销最近的提交(不编辑提交信息)

bash
git revert HEAD --no-edit  # 撤销最近一次提交,使用默认提交信息

场景:撤销合并提交

bash
git revert -m 1 <merge-commit-hash>  # 撤销合并提交,保留主分支方向的历史

注意事项

  1. 与 git reset 的区别

    • git revert 创建新提交来撤销更改,保留历史记录,适合已推送的提交
    • git reset 直接删除提交历史,会改写历史,不适合已推送的提交
  2. 提交顺序:撤销多个提交时,建议按时间顺序从新到旧执行,避免因依赖关系导致冲突。

  3. 合并提交处理:对合并提交执行 revert 时,必须用 -m 选项指定保留的父提交(通常用 1 表示主分支方向的父提交),例如:

    bash
    git revert -m 1 <merge-commit-hash>
  4. 冲突处理:若撤销的提交与当前分支存在冲突,必须手动解决后才能继续,否则会中断操作。

  5. 历史完整性:revert 会保留原始提交的历史记录,适合团队协作和代码审查,但会增加提交历史数量。

  6. 推送要求:执行 revert 后需要推送到远程仓库,确保团队成员都能看到撤销操作。

应用场景

  • 撤销已推送的提交:当提交已推送到远程仓库时,使用 revert 安全撤销,避免影响其他团队成员。
  • 修复生产环境 bug:快速撤销导致生产问题的提交,创建修复提交,保持历史可追溯。
  • 回退特定功能:撤销某个功能的提交,保留其他更改,无需重新开发。
  • 代码审查后的撤销:在代码审查发现问题后,使用 revert 撤销提交,保持审查记录完整。
  • 临时功能移除:临时移除某个功能,后续可通过 revert 的 revert 恢复(即撤销撤销操作)。

高级用法

撤销但不提交

bash
git revert -n <commit-hash>  # 撤销更改但不提交,可继续修改后统一提交
git commit -m "撤销提交并添加额外修复"

撤销多个提交并合并为一个提交

bash
git revert -n <hash1> <hash2> <hash3>  # 撤销多个提交但不提交
git commit -m "批量撤销多个提交"  # 统一提交为一个新提交

小结

git revert 是 Git 中安全撤销提交的工具,核心价值在于保留历史记录的同时撤销更改,特别适合已推送到远程仓库的提交。使用时建议结合 git log 确认提交信息,并在处理冲突时仔细核对代码逻辑。与 git reset 相比,revert 更安全但会产生更多提交记录,需根据实际场景选择合适的方法。

赞赏博主
评论 隐私政策