文章摘要 FakeGPT
加载中...|
概述
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
确认要撤销的提交
bashgit log --oneline # 查看提交历史,确认提交哈希执行 revert
bashgit revert abc123处理冲突(若有)
冲突时命令会暂停,需手动修改冲突文件
解决后标记为已解决
bashgit add <冲突文件>继续执行 revert
bashgit revert --continue若需放弃操作
bashgit revert --abort
推送到远程仓库
bashgit push origin main
场景:撤销最近的提交(不编辑提交信息)
bash
git revert HEAD --no-edit # 撤销最近一次提交,使用默认提交信息场景:撤销合并提交
bash
git revert -m 1 <merge-commit-hash> # 撤销合并提交,保留主分支方向的历史注意事项
与 git reset 的区别:
git revert创建新提交来撤销更改,保留历史记录,适合已推送的提交git reset直接删除提交历史,会改写历史,不适合已推送的提交
提交顺序:撤销多个提交时,建议按时间顺序从新到旧执行,避免因依赖关系导致冲突。
合并提交处理:对合并提交执行 revert 时,必须用
-m选项指定保留的父提交(通常用1表示主分支方向的父提交),例如:bashgit revert -m 1 <merge-commit-hash>冲突处理:若撤销的提交与当前分支存在冲突,必须手动解决后才能继续,否则会中断操作。
历史完整性:revert 会保留原始提交的历史记录,适合团队协作和代码审查,但会增加提交历史数量。
推送要求:执行 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 更安全但会产生更多提交记录,需根据实际场景选择合适的方法。
赞赏博主
评论 隐私政策