Git撤销提交有几种方式?常用解决方案对比

雨敏吖_4530

雨敏吖_4530

2026-11-10

773人浏览

原创

git reset --hard适用于本地未推送的实验性改动彻底回退,如feature分支上连续三次测试提交尚未push时直接回到干净状态;但若已推送到远程则禁用,否则会破坏协作历史。

git撤销提交有几种方式?常用解决方案对比

git reset --hard 适合什么场景

只在本地分支操作、且确认不需要保留后续提交和工作区修改时用。比如刚在 feature 分支上连续 commit 了三次测试代码,还没 push,现在想直接回到上上周的干净状态。

常见错误现象:git reset --hard HEAD~3 执行后 git log 看不到那三行提交,但同事说“你昨天推的配置我拉不下来了”——说明你忘了它其实已 push 过。

  • 必须确认远程没有该提交,否则强制推送会破坏他人本地历史
  • HEAD~3 和 HEAD^3 效果不同:前者是“往前数3个父提交”,后者是“取第3个父提交”(合并提交才有多个父)
  • 执行后所有未提交改动永久丢失,git reflog 是唯一找回路径

git revert 是团队协作的默认选择

只要提交已经出现在远程仓库(尤其是 main、develop 这类共享分支),就该无条件优先用 git revert。它不改写历史,只是加一条“反向操作”的新提交。

使用场景举例:CI 构建失败后发现是某次 PR 合并引入的空指针,而其他同事已基于该提交做了新开发。

  • git revert HEAD 撤销最新一次提交;git revert abc1234 撤销指定哈希提交
  • 合并提交需加 -m 1 参数,否则 Git 不知道该以哪边为基准撤销
  • 如果撤销过程中出现冲突,解决后 git add . && git revert --continue,不是 git commit

git commit --amend 只修正最后一次提交

这不是“撤销”,而是“覆盖重写”。适用于刚提交完就发现漏文件、错信息、或想把暂存区新改动合并进去的情况。

Github Codebase Inspection
Github Codebase Inspection

使用 pygount 检查代码库:统计代码行数(LOC)、编程语言及占比。

下载

容易踩的坑:执行 git commit --amend 后又 push,Git 默认拒绝,报错 rejected non-fast-forward——因为远程有你没拉的新提交。

  • 仅限未 push 的提交;若已 push,先 git pull 再 amend,否则会多出一个合并提交
  • --amend -m "新消息" 可跳过编辑器,适合 CI 脚本中自动修正
  • 它不会改变原提交哈希,所以本质上仍是“替换”而非“追加”

reflog 是 reset 后的最后保险

当你手抖敲了 git reset --hard 又关了终端,git log 里提交没了,别急着重写代码——git reflog 记录了 HEAD 每一次移动,包括被 hard reset 抹掉的提交。

典型输出:abc1234 HEAD@{0}: reset: moving to HEAD~1 → def5678 HEAD@{1}: commit: fix login timeout。要找回,就 git reset --hard def5678。

  • reflog 默认只保留 90 天(gc.reflogExpire 配置),长期未操作的仓库可能已清理
  • 它只存在于本地仓库,无法从远程恢复;别人也看不到你的 reflog
  • 对已 push 的提交,reflog 找回后仍需 git push --force-with-lease 同步,不能直接 push -f

实际协作中最容易被忽略的一点:撤销动作本身不是终点,而是同步信号。哪怕用了最安全的 git revert,也要在 PR 描述或群消息里写明“已 revert abc1234,因触发 XX 异常”,否则下一个人可能又 merge 回去。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

git撤销提交 git

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

2023.07.05

7359

9

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

2023.07.06

2040

6

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

2023.07.24

1214

5

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

4777

7

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

4701

6

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

40

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

20

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

20

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

40

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Postman Native Git工作流指南
Postman Native Git工作流指南

共0课时 | 0人学习

vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 8.2万人学习