如何通过git删除某个文件的历史提交记录

项目场景:

有时候我们在修改项目的配置信息时,不小心把一些敏感信息配置到项目当中,众所周知,git可以查看文件的所有的修改记录。此时就需要一个更加强大的工具,在不修改其它文件的修改记录,单单删除我们提交的那个文件的修改记录,就算查看文件git log也是没办法翻出铭感信息的

例如:我们项目当中的application.yml文件配置了一些敏感信息,后续考虑到这些敏感信息的安全风险,决定使用nacos去管理配置,需要将历史的提交信息给删除掉,假设我们想删除datasource相关的提交记录。

yml 复制代码
spring:
  profiles:
    active: test

server:
  max-http-header-size: 48000

---
#生产环境配置
spring:
  profiles: prod
  #mysql数据库配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1/push?characterEncoding=utf8&useSSL=true
    username: push
    password: push
    hikari:
      max-lifetime: 120000

解决方案:

提示:通过git filter-branch去进行提交记录的过滤处理与删除,该操作有很大的风险,会强行的修改所有人对于这个文件修改的协同操作,请备份分支后操作

  • cd到项目路径下,隐藏文件.git文件的同级目录

  • 执行命令去删除某个文件的git提交记录,我这边还是拿我上边举例的application.yml文件操作

    bash 复制代码
    git filter-branch --force --index-filter "git rm --cached --ignore-unmatch \
    src/main/resources/application.yml" --prune-empty --tag-name-filter cat -- --all
  • 执行过程中就会出现git提交记录的修改日志

  • 执行完成后就会给出如下的提示

  • 最后一步,需要将这写修改的记录强推到远程,至此该文件已经被项目删除,且提交记录也全都从git的日志列表当中删除,我们重新创建一个安全的application.yml进行重新提交即可

    bash 复制代码
     git push origin --force --all
相关推荐
小小小米粒5 小时前
重置本地git
大数据·git·elasticsearch
鶴哥只手遮天11 小时前
第 8 章 工作区与检出:unpack-trees 与并行 checkout
git
xing-xing13 小时前
git 相关命令总结
git
A-刘晨阳15 小时前
GitLab + ArgoCD 实现 Kubernetes GitOps 自动化部署
运维·人工智能·git·kubernetes·自动化·云计算·argocd
ControlRookie1 天前
SyncBridge:一个 CODESYS 工程与 AI 之间工程师级的同步工具
git·ai编程·codesys·工业软件·controlrookie
鬼手点金1 天前
opencode-性能优化建议
java·人工智能·git·自动化·nanogpt
网络毒刘2 天前
开源 Aider 工作流实战:Git 提交驱动的 AI 结对,与 Cursor 何时互补
git·ai编程·cursor·aider
HRTOS2 天前
HRTOS 4.0 将长期维护:为什么版本号不再频繁变化
经验分享·git·单片机·51单片机
驭渊的小故事2 天前
linux 基础命令 + git 仓库创建和配置命令
linux·git
行者-全栈开发3 天前
华为云码道 CodeArts 实测:让 AI 用 Rust 写一个 Git 仓库健康度体检台「仓衡」
git·rust·tauri·桌面应用·ai 编程·华为云码道·codearts 代码智能体