Git 删除指定提交记录操作指南

背景

需要删除以下两个提交记录:

  • 772074d5 - feat: 助手新手指引权限控制
  • e1f38bff - Revert "feat: 助手新手指引权限控制"

当前提交历史

bash 复制代码
ec514b25 Merge branch 'develop' of http://93.1.34.35:12000/aops-front/uatu into dev-8.19
772074d5 feat: ai助手新手指引权限控制
bf82914f feat: 添加服务目录路由配置和菜单入口
fd64b30a feat: 新增服务目录管理页面
b9b2d47c 列表支持自动搜索

操作方法

方法一:使用 git reset --hard(推荐,简单直接)

适用于:本地提交,未 push 到远程仓库

bash 复制代码
# 1. 查看提交历史,找到要保留的最后一个提交
git log --oneline -5

# 2. 假设你要保留 bf82914f,删除之后的所有提交
git reset --hard bf82914f

# 3. 确认提交历史
git log --oneline -5

说明:

  • git reset --hard bf82914f 会将分支重置到 bf82914f 这个提交
  • 之后的所有提交(包括 772074d5 和 e1f38bff)都会被删除
  • 工作区的文件也会恢复到 bf82914f 的状态

方法二:使用 git rebase -i(交互式,更灵活)

适用于:本地提交,需要选择性删除

bash 复制代码
# 1. 找到要删除的提交之前的那个提交
# 假设你要删除 772074d5 和 e1f38bff,它们之前的提交是 bf82914f

# 2. 启动交互式 rebase
git rebase -i bf82914f

# 3. 在打开的编辑器中,你会看到类似这样的内容:
# pick 772074d5 feat:  助手新手指引权限控制
# pick e1f38bff Revert "feat:  助手新手指引权限控制"

# 4. 将这两行前面的 pick 改为 drop,或者直接删除这两行
# 保存并退出编辑器

# 5. 确认提交历史
git log --oneline -5

方法三:使用 git revert + git rebase(更安全)

适用于:已经 push 到远程仓库的情况

bash 复制代码
# 1. 先 revert 这两个提交
git revert --no-edit e1f38bff
git revert --no-edit 772074d5

# 2. 然后用 rebase 压缩这些提交
git rebase -i bf82914f

# 3. 在编辑器中,将 revert 提交和原始提交都改为 drop
# 保存并退出

实际操作示例

在本次操作中,我执行了以下命令:

bash 复制代码
# 查看提交历史
git log --oneline -8

# 找到要保留的最后一个提交 bf82914f
# 重置到该提交,删除之后的所有提交
git reset --hard bf82914f

# 确认结果
git log --oneline -5
git status

操作结果

操作前的提交历史:

bash 复制代码
e1f38bff Revert "feat: 工单助手新手指引权限控制"
ec514b25 Merge branch 'develop' ...
772074d5 feat: 工单助手新手指引权限控制
bf82914f feat: 添加服务目录路由配置和菜单入口
fd64b30a feat: 新增服务目录管理页面

操作后的提交历史:

bash 复制代码
bf82914f feat: 添加服务目录路由配置和菜单入口
fd64b30a feat: 新增服务目录管理页面
b9b2d47c 工单列表支持自动工单搜索

删除的提交:

  • ✅ 772074d5 - feat: 助手新手指引权限控制
  • ✅ e1f38bff - Revert "feat: 助手新手指引权限控制"

⚠️ 重要警告

如果提交已经 push 到远程仓库

  1. 不要使用 git reset --hard

    • 这会导致远程仓库的历史与本地不一致
    • 其他协作者 pull 时会出现问题
  2. 应该使用 git revert

    • 创建新的提交来撤销更改
    • 保留历史记录的完整性
  3. 或者使用 git push --force(危险操作)

    • 需要团队所有成员协调
    • 可能导致其他人的本地提交丢失

安全建议

  • ✅ 如果只是本地提交,使用 git reset --hard
  • ✅ 如果已经 push,使用 git revert
  • ❌ 不要在公共分支上使用 git push --force
  • ❌ 不要在团队协作时随意修改提交历史

常用 Git 命令

bash 复制代码
# 查看提交历史
git log --oneline -10

# 查看提交历史图形
git log --oneline --graph -10

# 重置到指定提交
git reset --hard <commit-hash>

# 交互式 rebase
git rebase -i <commit-hash>

# 撤销提交(创建新的提交)
git revert <commit-hash>

# 查看当前状态
git status

总结

本次操作成功删除了两个不需要的提交记录:

  1. 助手权限控制提交
  2. 对应的 revert 提交

使用 git reset --hard 是最简单直接的方法,适用于本地提交的删除。

相关推荐
Cry丶6 小时前
Git Rebase 操作备忘
git·rebase
你叶不叶14 小时前
abap git 如何从 gitee上在线拉取数据(上一步已经配置好证书)
git·gitee·sap·abapgit
kuroomi2 天前
Git入门
git·kubernetes
daliucheng2 天前
lazygit 上手:日常 git 操作一篇讲完
git
codigger2 天前
大厂git提交规范
git·程序员
挖掘狂人2 天前
六条分支,一条主干:我的 Git 分支管理心得
git·后端·程序员
Brookty2 天前
Git与GitHub系统学习|本地Git工作模型:终端与进程、CWD、HEAD/Index/工作树及Git对象
git·github
2301_767113982 天前
点过“不再询问”就要检查:Claude Code权限文件也可能存着密钥
git·信息安全·claude code
江屿风3 天前
【Git-组件】【Git入门:从文档灾难到版本掌控】流食般投喂
运维·笔记·git·组件·版本控制
程序员沉梦听雨3 天前
【Git】fork工作流与上游同步
git