删除误提交的 git commit

背景描述

某次的意外 commit 中误将密码写到代码中并且 push 到了 remote repo 里面, 本文将围绕这个场景讨论如何弥补.

模拟误提交操作

  • 在 Gitee 创建一个新的 Repo, clone 到本地
git clone https://gitee.com/lpwm/myrepo.git
  • 创建两个文件, commit 后 push 到 remote 作为初始提交
cd myrepo
echo "A file" > A.txt
echo "B file" > B.txt
git add *
git commit -m "Initial commit"
git push

在 Gitee 检查提交成功:
在这里插入图片描述

  • 分别修改两个文件, 模拟 A.txt 中误写入了敏感信息, B.txt 属于正常修改. commit & push
echo "Password is admin" >> A.txt
echo "Normal content appended" >> B.txt
git add *
git commit -m "Fault commit"
git push

在这里插入图片描述

  • 接下来我们要实现的是从远端的 Repo 中修复(删除) A.txt 中误写入的敏感信息, 同时保留 B.txt 中正常的修改内容.

实现过程

主要思路是, 首先从当前已经误提交的状态创建一个新的 branch 作为备份, 在主 branch revert 回滚到误提交前一次的 commit, 强制 push 到 remote 端, 此时远端 repo 中就不会存在后面误提交的 commit 了. 再从备份的 branch merge 到当前 branch, 修改误操作的文件后提交新的 commit, 然后使用 squash 合并最近的两次 commit, 最后再 push 一把.

  • 检查已提交过的历史记录
git log

commit 327d1b09d7fdb43af596c05713d8424181a6b97b (HEAD -> master, origin/master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:21:24 2023 +0800

    Fault commit

commit 27b6ee4ed4a0ff44f2a5831fd5162075bef6a4b4
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:15:30 2023 +0800

    Initial commit
  • 创建新的 branch 作为备份, 但是不切换
git branch backup
  • 确认当前仍处于默认的 master branch
git branch

  backup
* master
  • 强制回滚到错误提交的前一次 commit, 即 Initial commit, 不保留后面做出的所有修改
git reset --hard 27b6ee4ed4a0ff44f2a5831fd5162075bef6a4b4

  • 检查确认文件内容回滚到了当时的状态
cat A.txt

A file
  • 将当前状态强制推到 remote repo, 即从远端删除后面误提交的内容
git push --force
  • 检查确认 Gitee 中误提交的那次 commit 已经被删除
    在这里插入图片描述
    误提交的内容是删掉了, 但是其他正常修改的文件内容也没了, 肯定是不行的. 接下来我们继续使用前面创建的 backup branch 来进行合并恢复和修补

  • 确认当前激活的 branch 是 master

git branch

  backup
* master
  • 将 backup 合并到 master
git merge backup
  • 检查 log, 可以看到 merge 后之前的误提交也回来了
git log

commit 327d1b09d7fdb43af596c05713d8424181a6b97b (HEAD -> master, backup)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:21:24 2023 +0800

    Fault commit

commit 27b6ee4ed4a0ff44f2a5831fd5162075bef6a4b4 (origin/master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:15:30 2023 +0800

    Initial commit

  • 检查 A.txt 也可以看到误提交写进去的敏感信息
cat A.txt

A file
Password is admin

  • 这时候需要注意, 虽然文件内容是回来了, 但是我们都还是在本地进行的操作, 远端的 repo 中并不受影响, 因此我们可以继续修改 A.txt 文件内容, 将敏感信息删掉, 然后再提交一个新的 commit
echo "A file" > A.txt
git add *
git commit -m "Fixed commit"
  • 检查 log
commit b71cde372e30f7bec24a7a8d9086711ab517a2ba (HEAD -> master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:52:32 2023 +0800

    Fixed commit

commit 327d1b09d7fdb43af596c05713d8424181a6b97b (backup)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:21:24 2023 +0800

    Fault commit

commit 27b6ee4ed4a0ff44f2a5831fd5162075bef6a4b4 (origin/master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:15:30 2023 +0800

    Initial commit
  • 将 “Fixed commit” 和 “Fault commit” 合并(squash)成一个 commit
git rebase -i HEAD~2

注意这里的 HEAD~2 表示从 HEAD 位置往前倒推选择两次 commit 记录进行编辑, 从上面的 log 也可以找到 HEAD 位置就是最近提交的这次 Fixed commit. git rebase 命令执行后会进入到交互编辑模式
在这里插入图片描述
注意这里的 commit 显示顺序是倒着来的, 我们想要将 Fixed commit 合并入 Fault commit 里面, 因此需要修改 Fixed commit 前面的 picksquash, :wq保存后会出现新的 commit message, 默认是将两次的 commit message 拼接到了一起, 愿意改的就改一下, 然后继续保存, 提示 rebase 成功

git rebase -i HEAD~2

[detached HEAD 2f1bc19] Fault commit
 Date: Tue Dec 5 22:21:24 2023 +0800
 1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/master.
  • 再次检查 log, 可以看到除了最初的 Initial commit 外, 就只有一个上面合并后的 commit
git log

commit 2f1bc195739602a5d6d20e8438e143941b4e3359 (HEAD -> master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:21:24 2023 +0800

    Fault commit

    Fixed commit

commit 27b6ee4ed4a0ff44f2a5831fd5162075bef6a4b4 (origin/master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:15:30 2023 +0800

    Initial commit
  • 再 push 到 remote repo
git push
  • 检查 Gitee
    在这里插入图片描述
    在这里插入图片描述
    完美!

  • 最后要做的一步就是清理本地 backup branch, 注意这里要用 -D 参数, 等同于 --delete --force 强制删除, 如果是普通的 -d 删, 会提示 error: The branch 'backup' is not fully merged.

git branch -D backup

参考文档

Squash commits into one with Git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/221915.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2022年第十一届数学建模国际赛小美赛B题序列的遗传过程解题全过程文档及程序

2022年第十一届数学建模国际赛小美赛 B题 序列的遗传过程 原题再现&#xff1a; 序列同源性是指DNA、RNA或蛋白质序列之间的生物同源性&#xff0c;根据生命进化史中的共同祖先定义[1]。DNA、RNA或蛋白质之间的同源性通常根据它们的核苷酸或氨基酸序列相似性来推断。显著的相…

【EI征稿中|SPIE出版】 第四届传感器与信息技术国际学术会议(ICSI 2024)

第四届传感器与信息技术国际学术会议&#xff08;ICSI 2024&#xff09; 2024 4th International Conference on Sensors and Information Technology&#xff08;ICSI 2024&#xff09; 第四届传感器与信息技术国际学术会议&#xff08;ICSI 2024&#xff09;将于2024年1月5…

VS2019shi用动态链接库

.dll文件路径包含 C/C常规-------->附加包含目录 将动态库项目文件路径包含在附加包含目录。 .lib文件路径包含 连接器------------>输入------------------>附加依赖项 .lib文件名字输出附加依赖项 连接器------------>常规------------------>附加库目录 添加…

软著项目推荐 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…

外包干了8个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

开源代驾上门预约小程序源码系统:预约代驾,出行更无忧 附带完整的搭建教程

随着人们生活水平的提高&#xff0c;越来越多的人选择代驾服务。为了方便用户预约代驾&#xff0c;罗峰来给大家分享一款开源代驾上门预约系统。该系统具有以下特色功能&#xff0c;让出行更加无忧。 以下是部分代码示例&#xff1a; 系统特色功能一览&#xff1a;​​​​​​…

【计算机网络笔记】物理层——信道与信道容量

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

理解依赖注入

1 回顾Spring IoC容器 1.1 Spring IoC容器 Web应用程序由大量的程序组件组成&#xff0c;这些组件一起工作完成业务逻辑的执行。 这些组件通常是一个依赖另一个&#xff0c;互相协作实现所需功能。 Spring提供容器&#xff0c;也就是IoC容器&#xff0c;来管理这些组件&…

万界星空科技MES系统在工业生产中的应用

万界星空科技MES系统在工业生产中的应用广泛。它适用于各类制造业&#xff0c;包括汽车制造、电子制造、注塑、能源化工、航天航空、食品加工、服装纺织、灯具、电线电缆、电机发动机、印刷包装等行业。 在汽车制造领域&#xff0c;MES系统可以实时追踪和控制整个生产过程&…

摄像头选型号指南

镜头选型工具 - HiTools - 海康威视 Hikvisionhttps://www.hikvision.com/cn/support/tools/hitools/cl8a9de13648c56d7f/ 1. 海康威视摄像头选型号指南 海康威视摄像头选型号指南-CSDN博客文章浏览阅读3.7k次。跟客服对话比跟AI对话好不了多少&#xff0c;能噎死人&#xff0…

graphics.h安装后依旧报错

问题解决一&#xff1a; 我在网上找了很多&#xff0c;都说找到graphics.h这个文件&#xff0c;放到include这个目录下&#xff0c;我照做了&#xff0c;然后 当我进行编译时&#xff0c;自动跳到graphics.h这个文件并出现一堆报错 问题解决二&#xff1a; 看一下这两个文件是…

【优选算法系列】【专题三二分查找】第二节.35. 搜索插入位置和69. x 的平方根

文章目录 前言一、搜索插入位置 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写 1.2.3 题目总结二、x 的平方根 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写 …

思腾云计算中心 | 5千平米超大空间,基础设施完善,提供裸金属GPU算力租赁业务

2021年&#xff0c;思腾合力全资收购包头市易慧信息科技有限公司&#xff0c;正式开启云计算业务。思腾云计算中心占地2400平米&#xff0c;位于包头市稀土高新区&#xff0c;毗邻多家知名企业&#xff0c;地理位置优越&#xff0c;交通便利&#xff0c;是区内重要的信息化产业…

深度学习火车票识别系统 计算机竞赛

文章目录 0 前言1 课题意义课题难点&#xff1a; 2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别部分实现代码 3 实现效果4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 图像识别 火车票识别系统 该项目较为新颖&#xff0c;适…

小航助学题库白名单竞赛考级蓝桥杯等考scratch(11级)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09; 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;

小航助学题库白名单竞赛考级蓝桥杯等考scratch(6级)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09; 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;

认知觉醒(四)

认知觉醒(四) 第三节 耐心&#xff1a;得耐心者得天下 20世纪八九十年代&#xff0c;金庸的武侠小说风靡全国。如今&#xff0c;虽然几十年过去了&#xff0c;金庸先生也已与世长辞&#xff0c;但他留下的作品依然广受欢迎&#xff0c;被奉为经典。如此成就&#xff0c;自然…

游戏:火星孤征 - deliver us mars - 美图秀秀~~

今天水一篇&#xff0c;借着免费周下载了deliver us mars&#xff0c;玩下来截了好多图&#xff0c;就放这里了。 游戏没有难度&#xff0c;剧情也不难理解&#xff0c;美图到处都是&#xff0c;建模细节也是满满&#xff0c;值得一玩。 游戏中的 A.S.E是守卫飞行机器人&…

HarmonyOS鸿蒙操作系统架构

目录 1. 分布式架构&#xff1a; 2. 统一的开发平台&#xff1a; 3. 多内核共享&#xff1a; 4. 自适应界面&#xff1a; 5. AR、VR、MR支持&#xff1a; 6. 安全和隐私保护&#xff1a; 7. AI集成&#xff1a; 8. 应用生态系统&#xff1a; 9. 开源和开放&#xff1a…

Vue实现条件渲染

&#x1f4d1;前言 本文主要是【Vue】——Vue实现条件渲染的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&am…