Git 实操:如何使用交互式 Rebase 移除指定提交(真实案例分享)
在日常开发中,有时候我们提交了一些不想保留的记录,比如测试代码、错误的功能提交等。
⚠️ 在操作 4. 强制推送到远程仓库前
的注意事项
强制推送(git push --force
或 git push -f
)确实很强大但也危险,因为它会重写远程仓库历史,可能影响他人协作或导致代码丢失。以下是你强制推送前后的关键注意事项:
-
确保只有你在改这条分支
- 如果多人在同一个分支(如
dev
或main
)开发,强推很容易让别人提交丢失。 - ✅ 建议只对自己的功能分支(如
feature/coupon
)强推。
- 如果多人在同一个分支(如
-
提前备份当前分支
万一操作出错,可恢复现场:git branch backup/dev
本次实操目标:
基于如下提交历史:
我们希望:
- 保留其它三个提交
- 移除
feat(parseScanCodeQuery): 添加二维码解析函数并更新版本号
操作步骤详解
1. 打开交互式 Rebase 界面
因为要操作最近 4 条提交,所以执行:
git rebase -i HEAD~4
执行后 Git 会打开编辑器,显示类似下面的内容:
2. 修改提交列表:drop
需要移除的提交
按i
进入插入模式,找到需要删除的那一行(二维码解析函数那一行),把 pick
改成 drop
,像这样:
然后按 Esc
,输入 :wq
保存并推出,回车。
3. 处理冲突(如果有)
通常删除提交不会有冲突,但如果 Git 报错了,比如有冲突,需要这么处理:
# 先解决冲突
git add .# 然后继续 rebase
git rebase --continue
如果提示 “no changes”,可以直接继续。
4. 强制推送到远程仓库
因为我们改动了历史记录,所以要强制推送:
git push origin dev --force
这样远程分支 dev
上的提交记录也会更新成干净的状态!
总结版命令一览
整体流程就是:
git rebase -i HEAD~4
# 把不想要的 commit 改成 drop
# 按 `Esc`,输入 `:wq`保存并退出
# (如有冲突,解决后 git add . && git rebase --continue)
git push origin dev --force
小知识补充
pick
:保留这个提交drop
:移除这个提交reword
:修改提交信息edit
:修改提交内容squash
:把多个提交压成一个fixup
:和 squash 类似但丢弃 commit message
交互式 rebase不仅能删除,还能整理提交、修改历史,是 Git 的一项非常重要的技能!
结语
通过这次实操,我们完成了:
- 使用
git rebase -i
打开提交编辑器 - 用
drop
指令删除不需要的提交 - 强制推送更新远程仓库
掌握这套流程后,再也不用担心历史提交杂乱了!🚀
希望这篇博客对你有帮助,欢迎点赞、收藏或分享给有需要的朋友!