背景
需要删除以下两个提交记录:
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 到远程仓库
-
不要使用
git reset --hard- 这会导致远程仓库的历史与本地不一致
- 其他协作者 pull 时会出现问题
-
应该使用
git revert- 创建新的提交来撤销更改
- 保留历史记录的完整性
-
或者使用
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
总结
本次操作成功删除了两个不需要的提交记录:
- 助手权限控制提交
- 对应的 revert 提交
使用 git reset --hard 是最简单直接的方法,适用于本地提交的删除。