git 撤销某次提交的上交到远程服务器的commit提交,此提交后面的commit需要保留【deeepseek生成】

ops/2025/3/15 4:29:24/

核心思路 使用 git rebase -i 重写提交历史,删除目标提交后强制推送到远程(需谨慎操作)。

操作步骤
1. 确认要删除的提交位置

# 查看提交历史(找到要删除的提交哈希,例如 a1b2c3d)
git log --oneline

查看提交历史(找到要删除的提交哈希,例如 a1b2c3d)

git log --oneline
  1. 启动交互式变基(假设要删除的提交是倒数第3个)

进入变基编辑模式(基于目标提交的上一个提交)

git rebase -i HEAD~3

如果知道具体哈希值,可直接用:

git rebase -i a1b2c3d^  # ^ 表示目标提交的前一个提交

3. 编辑提交列表
在打开的编辑器中:

删除或注释掉(行首加 #)目标提交所在的行。
保存并退出编辑器。
示例:

pick 5a2b3c4 提交A
drop d4e5f6a 要删除的提交B  # 删除此行或改为 #drop
pick 7g8h9i0 提交C

4. 处理可能的冲突
如果变基过程中出现冲突:
手动解决冲突文件。
标记已解决的文件:

git add <冲突文件>
继续变基:
git rebase --continue
放弃变基(可选):
git rebase --abort
  1. 强制推送修改后的历史到远程
git push origin <分支名> --force

或使用更安全的选项(推荐团队协作时)

git push origin <分支名> --force-with-lease

注意事项
风险提示
强制推送 (–force) 会覆盖远程历史,仅限个人分支或团队允许时使用。
若其他成员已拉取旧历史,需通知他们同步更新(建议操作前协调)。
备份分支
操作前创建备份分支以防万一:

git checkout -b backup-branch

替代方案(保留历史)
若不想修改历史,可使用 git revert 生成反向提交(但会保留原提交记录):

git revert <提交哈希>
git push origin <分支名>

操作流程图解

原始提交历史:A -> B(要删除) -> C -> D
变基后历史:     A -> C' -> D'

适用场景
个人分支:清理误提交的敏感信息或错误代码。
团队协作分支:需确保所有成员知晓历史变更,避免协作混乱。
建议在操作前充分测试,确保对工作流影响可控。


http://www.ppmy.cn/ops/165845.html

相关文章

大白话react第十九章React 与 WebGL 项目的深度拓展和优化

大白话react第十九章React 与 WebGL 项目的深度拓展和优化 1. 实现 VR/AR 交互体验 在 3D 网页应用里加入虚拟现实&#xff08;VR&#xff09;或者增强现实&#xff08;AR&#xff09;功能&#xff0c;能让用户有更沉浸的体验。就好比用户戴上 VR 眼镜&#xff0c;就能感觉自…

【我的 PWN 学习手札】House of Pig

House Of Pig House of Pig是利用tcache stash unlink与largebin attack攻击IO_FILE共同实现的一种手法&#xff0c;一般来说利用得到的任意地址写能力往hook上写数据&#xff0c;从而完成对程序流的劫持。 一、关键源码分析&#xff1a;_IO_str_overflow const struct _IO_…

前端学习笔记(三)——ant-design vue表单传递数据到父页面

前言 善用AI&#xff0c;快速解决定位 原理 a-form所在的SFC&#xff08;单文件&#xff09;vue中需要将表单数据传递给父页面SFC文件中&#xff0c;使用emit方法 代码 子组件&#xff08;Form.vue&#xff09; <template><a-form submit"handleSubmit&qu…

Redis 设置密码(配置文件、docker容器、命令行3种场景)

现在没有配置密码的 Redis&#xff0c;一般来说&#xff0c;已经被很多安全检测系统视为漏洞和问题了&#xff0c;官方的 Redis 默认是关闭密码的&#xff0c;如果需要设置密码&#xff0c;目前应用场景来说可以分为三种&#xff0c;如下&#xff1a; 1、基于配置文件的 通过…

用 Vue 3.5 TypeScript 做了一个日期选择器(改进版)

上一篇 已经实现了一个日期选择器&#xff0c;只不过是模态窗的形式&#xff0c;这个版本改为文本框弹出&#xff0c;点击空白处可关闭日历 代码也增加了不少 <template><div><!-- 添加文本框 --><div class"date-picker-input-wrapper">&l…

Java 实现 Android ViewPager2 顶部导航:动态配置与高效加载指南

Java 实现&#xff1a;明确使用的编程语言。Android ViewPager2&#xff1a;技术栈和核心组件。顶部导航&#xff1a;功能点。动态配置与高效加载指南&#xff1a;突出动态配置的灵活性和性能优化的重点。 在 Android 中使用 Java 实现 ViewPager2 和 TabLayout 的顶部导航也是…

【前端】如何在HTML中调用CSS和JavaScript(完整指南)

文章目录 前言一、HTML调用CSS1. 内联样式&#xff08;Inline Style&#xff09;2. 内部样式表&#xff08;Internal Stylesheet&#xff09;3. 外部样式表&#xff08;External Stylesheet&#xff09; 二、HTML调用JavaScript1. 内联脚本&#xff08;Inline Script&#xff0…

C语言数据结构:数组

1. 数组&#xff08;Array&#xff09; 1.1 定义 数组是一种线性数据结构&#xff0c;由相同类型的元素组成&#xff0c;这些元素在内存中按顺序存储。数组的大小在声明时确定&#xff0c;且不可动态改变。 1.2 类型细分 根据维度和用途&#xff0c;数组可以分为以下几种类型…