当前位置: 首页 > java >正文

Git 实操:如何使用交互式 Rebase 移除指定提交(真实案例分享)

在日常开发中,有时候我们提交了一些不想保留的记录,比如测试代码、错误的功能提交等。

⚠️ 在操作 4. 强制推送到远程仓库前的注意事项

强制推送(git push --forcegit push -f确实很强大但也危险,因为它会重写远程仓库历史,可能影响他人协作或导致代码丢失。以下是你强制推送前后的关键注意事项:

  1. 确保只有你在改这条分支

    • 如果多人在同一个分支(如 devmain)开发,强推很容易让别人提交丢失。
    • ✅ 建议只对自己的功能分支(如 feature/coupon)强推。
  2. 提前备份当前分支
    万一操作出错,可恢复现场:

    git branch backup/dev
    

本次实操目标:

基于如下提交历史:
提交历史

我们希望:

  • 保留其它三个提交
  • 移除 feat(parseScanCodeQuery): 添加二维码解析函数并更新版本号

操作步骤详解

1. 打开交互式 Rebase 界面

因为要操作最近 4 条提交,所以执行:

git rebase -i HEAD~4

执行后 Git 会打开编辑器,显示类似下面的内容:
git rebase记录


2. 修改提交列表:drop 需要移除的提交

i进入插入模式,找到需要删除的那一行(二维码解析函数那一行),把 pick 改成 drop,像这样:
vim 编辑记录
然后按 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 指令删除不需要的提交
  • 强制推送更新远程仓库

掌握这套流程后,再也不用担心历史提交杂乱了!🚀
希望这篇博客对你有帮助,欢迎点赞、收藏或分享给有需要的朋友!

http://www.xdnf.cn/news/3016.html

相关文章:

  • 公路安全知识竞赛主持稿串词
  • Express 文件上传不迷路:req.files 一次性讲明白
  • 洛谷P2142高精度减法题解
  • USB 网卡——RNDIS 控制消息流程
  • AbMole解密生物医学新材料---PCL-PVAc-PEG
  • AUTOSAR图解==>AUTOSAR_RS_InteroperabilityOfAutosarTools
  • 同步与互斥(同步)
  • 【android bluetooth 案例分析 03】【PTS 测试 】【PBAP/PCE/SSM/BV-02-C】
  • 数据中心网络架构:高效规划与自动化设计实践
  • Android 系统发展史
  • php学习笔记(全面且适合新手)
  • Android的Imageview的src属性,如果设置width和height,但是图片本身很小,那么图片会自动缩放到Imageview一样的大小吗
  • GEE进行Theil-Sen Median斜率估计和Mann-Kendall检验
  • RK3568下背光控制 软件与调试技巧
  • 使用 TypeScript 开发并发布一个 npm 包(完整指南)
  • 小刚说C语言刷题——1032分糖果
  • 守护天空安全的科技利剑鼎讯信通(ACNN)的创新实践
  • Flume启动报错
  • MIT6.S081 - Lab11 networking(网络栈)
  • 阿里千问Qwen3技术解析与部署指南 :混合推理架构突破性优势与对DeepSeek R1的全面超越
  • Scrapy框架之CrawlSpider爬虫 实战 详解
  • 23种设计模式-行为型模式之解释器模式(Java版本)
  • Leetcode 3529. Count Cells in Overlapping Horizontal and Vertical Substrings
  • 关于汇编语言与程序设计——子程序设计
  • Android WIFI体系
  • Vue基础(一) 基础用法
  • 【Delphi】简化数据库读写(Helper)
  • Canvas基础篇:绘制矩形
  • 废品回收小程序:全链路数字化解决方案,赋能绿色未来
  • SDC命令详解:使用get_nets命令进行查询