软考架构师:六大质量属性与ATAM架构评估全解析
2026/10/20 2:34:27
如果要删除最近的几个提交,可以使用 git reset 命令
但是删除最近的提交最好的方法是使用revert, 而不是本篇文章使用的reset
git reset --soft HEAD~N
删除提交历史,但保留工作区(已修改的文件)和暂存区(git add 的内容)的修改。
# 删除最近1个提交(保留修改) git reset--soft HEAD~1# 删除最近3个提交(保留修改) git reset--soft HEAD~3适用场景:提交信息写错了,想重新提交;或者多个小提交想合并后重新提交。gitreset HEAD~N删除提交历史,保留工作区修改,但清空暂存区(需要重新 git add)
# 删除最近1个提交(清空暂存区) git reset HEAD~1# 等同于 git reset--mixed HEAD~1适用场景:想重新整理暂存区的文件,再重新提交。git reset--hard HEAD~1删除提交历史,同时丢弃工作区和暂存区的所有修改(无法恢复)。
# 删除最近1个提交(彻底丢弃修改) git reset--hard HEAD~1适用场景:确定这些修改完全不需要,想回到之前的干净状态。如果要删除历史中的某个特定提交(非最近的),需要使用 git rebase -i(交互式变基)
操作步骤
gitlog --oneline# 示例输出:# a1b2c3d (HEAD) 最近的提交# d4e5f6g 要删除的提交 ← 目标# g7h8i9j 更早的提交# 格式:git rebase -i <要删除的提交的前一个提交ID>gitrebase -i g7h8i9j# 原内容:pick d4e5f6g 要删除的提交 pick a1b2c3d 最近的提交# 修改为(二选一):drop d4e5f6g 要删除的提交# 方法1:改为 droppick a1b2c3d 最近的提交# 或直接删除目标提交行(方法2):pick a1b2c3d 最近的提交如果提交已经推送到远程仓库(如 GitHub/GitLab),需要强制推送来覆盖远程历史。
- 先删除本地提交, 使用上述 git reset 或 git rebase -i 方法删除本地提交。
- 强制推送到远程
# 方法1:基本强制推送(简单但风险较高)gitpush -f origin<分支名># 方法2:安全强制推送(推荐,会检查远程是否有新提交)gitpush --force-with-lease origin<分支名>