Git 清理指南:如何从版本库中移除误提交的文件(保留本地文件)

场景

在 Git 项目中,我们可能会不小心提交了本应忽略的文件(如 node_modules/.env*.log 等),导致仓库体积膨胀或敏感信息泄露。本文介绍如何从 Git 历史中彻底删除这些文件,同时保留本地文件


解决方案

1. 确认误提交的文件


# 查看 Git 仓库中的文件(包括已忽略的)
git ls-files

如果发现误提交的文件(如 config.ini),可以进一步检查其 Git 历史:


git log -- config.ini

2. 从 Git 中移除文件(但保留本地)

使用 git rm --cached 命令:


# 从 Git 索引中移除文件,但不删除本地文件
git rm --cached config.ini# 如果误提交的是整个目录(如 node_modules/)
git rm --cached -r node_modules/

注意

  • -cached 确保本地文件不会被删除
  • 如果文件已在 .gitignore 中,仍需手动从 Git 中移除

3. 更新 .gitignore(防止再次提交)


# 确保 .gitignore 已包含该文件echo "config.ini" >> .gitignore
echo "node_modules/" >> .gitignore# 检查 .gitignore 是否生效
git check-ignore -v config.ini

4. 提交更改


git add .gitignore
git commit -m "Remove accidentally committed files"
git push

⚠️ 警告:此时文件仍存在于 Git 历史中,可能被他人拉取到本地!如需彻底清除,继续下一步。


到这里基本就可以了,下方作为了解,酌情参考。


进阶:彻底清理 Git 历史中的文件

如果误提交的文件包含敏感信息(如密码、密钥),必须从 Git 历史中完全删除,可使用 git filter-repo(推荐)或 BFG Repo-Cleaner

方法 1:使用 git filter-repo(推荐)


# 安装 git-filter-repo
pip install git-filter-repo# 从所有提交历史中删除文件
git filter-repo --path config.ini --invert-paths# 强制推送清理后的仓库(⚠️ 会重写历史)
git push origin --force --all

方法 2:使用 BFG Repo-Cleaner(适合大文件)


# 下载 BFG
java -jar bfg.jar --delete-files config.ini .git# 清理 Git 垃圾数据
git reflog expire --expire=now --all
git gc --prune=now --aggressive# 强制推送
git push --force

最佳实践

  1. 提交前检查变更

    
    git status
    git diff --cached
  2. 使用预提交钩子(pre-commit)

    .git/hooks/pre-commit 中添加检查脚本,阻止提交忽略文件。

  3. 敏感信息处理

    如果误提交了密码,立即轮换密钥,即使已从 Git 中删除。


总结

操作类型命令示例适用场景
从暂存区移除git rm --cached file简单清理,保留本地文件
彻底删除历史记录git filter-repo --path file敏感信息泄露,需完全清除
防止未来提交更新 .gitignore避免重复错误

提示:强制推送 (git push --force) 会影响团队协作,请提前通知其他开发者!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器数据恢复—重装系统导致XFS文件系统分区无法访问的数据恢复案例

服务器数据恢复环境&故障: 一台服务器上通过磁盘柜RAID卡组建的riad5磁盘阵列,服务器上层安装Linux操作系统,搭建XFS文件系统。服务器上层分配一个LUN,并划分了两个分区。通过LVM扩容的方式将sdc1分区加入到了root_lv中&#…

在QtCreator中使用GitHubCopilot

文章目录 1.github copilot账号2. 安装node.js3.安装 GitHub Copilot Neovim plugin4.在Qt中启用4.1.在extension中启用4.2.在配置中启用4.3.使用/禁用 5.评价 在最新版的QtCreator中,已经通过Extension集成了GitHubCopilot进来。 我用的是16.0.2版本的(…

岛屿周长问题的三种解法:直接计数法、数学计算法与深度优先搜索

问题描述 给定一个二维网格 grid,其中1表示陆地,0表示水域。网格中的格子水平和垂直方向相连(对角线不相连)。网格中恰好有一个岛屿(即一个或多个相连的陆地格子),需要计算这个岛屿的周长。 解…

将包含父子关系的扁平列表 List<Demo> 转换成树形结构的 List<DemoVO>,每个节点包含自己的子节点列表

1.stream递归操作 private List<DemoVO> createtree(List<Demo> datas) {//得到父节点return datas.stream().filter(m -> TargetConstants.ROOT.equalsIgnoreCase(m.getParentId())).map(m -> {DemoVO vo new DemoVO();vo.setTaxonomyId(m.getPlatformTaxo…

【Jmeter】Jmeter 高并发性能压力测试

目录 一、下载 Jmeter 二、配置环境变量 三、设置中文语言 四、入门最简单的高并发性能压测流程 1. 添加线程组 2. 添加请求 3. 添加监听器 3.1 添加聚合报告 3.2 添加结果树 4. 启动测试 2 种启动方式&#xff1a; 查看结果树&#xff1a; 聚合报告&#xff1a; 五…

芯片测试之VIL/VIH(输入电平)Test全解析:从原理到实战

大家好&#xff0c;我是硅言。在数字芯片的“沟通体系”中&#xff0c;​​VIL&#xff08;输入低电平&#xff09;​​和​​VIH&#xff08;输入高电平&#xff09;​​如同芯片的“听觉阈值”&#xff0c;决定了它能否准确识别外部信号的逻辑状态。本文将从原理剖析、测试方…

【WPF】MVVM的消息机制

在WVM&#xff08;Model-View-ViewModel&#xff09;架构中&#xff0c;消息机制主要用于实现ViewModel与View之间的通信&#xff0c;同时保持它们的分离。这对于维护代码的清晰度和可测试性非常重要。在WPF&#xff08;Windows Presentation Foundation&#xff09;应用程序中…

以楼宇自控关键技术,夯实现代低碳建筑发展重要基础

当“碳达峰、碳中和”成为全球发展共识&#xff0c;建筑行业作为能源消耗与碳排放的重要领域&#xff0c;正加速向低碳化转型。在这场绿色变革中&#xff0c;楼宇自控技术凭借对建筑设备的智能管控与能源优化能力&#xff0c;成为现代低碳建筑建设的核心支撑。从数据采集到智能…

西电【信息与内容安全】课程期末复习笔记

西电【信息与内容安全】课程期末复习笔记 来自2022年春的古早遗留档案&#xff0c;有人需要这个&#xff0c;我就再发一下吧。 ‍ 平时成绩&#xff1a; 10%。线上&#xff1a; 10% &#xff08;线上学习内容&#xff0c; 共 100 分。&#xff09;实验&#xff1a; 10% &#…

【论文阅读笔记】ICLR 2025 | 解析Ref-Gaussian如何实现高质量可交互反射渲染

Reflective Gaussian Splatting Info 会议 【ICLR 2025】 作者 复旦大学&#xff0c;萨里大学&#xff1b;复旦张力教授团队 Github地址 https://github.com/fudan-zvg/ref-gaussian.git Project地址 https://fudan-zvg.github.io/ref-gaussian/ Abstract 新视图合成得益…

面向GPU、CPU及机器学习加速器的机器学习编译器

机器学习编译器概述 机器学习编译器是一种专门针对机器学习工作负载设计的工具&#xff0c;旨在将高层模型描述&#xff08;如TensorFlow或PyTorch模型&#xff09;高效编译为可在不同硬件&#xff08;如GPU、CPU或专用加速器&#xff09;上执行的底层代码。其核心目标是优化计…

论文分类打榜赛Baseline(2):InternLM昇腾硬件微调实践

本文来自社区投稿&#xff0c;作者丁一超 书生大模型实战营第5期已正式启动&#xff0c;本期实战营新增「论文分类打榜赛」&#xff0c;以帮助学员更好地掌握大模型技能。 本文将手把手带领大家如何基于昇腾微调 InternLM 模型&#xff0c;轻松上手论文自动分类任务。从环境配…

mac安装mvnd结合idea

mac安装mvnd结合idea hi&#xff0c;我是阿昌&#xff0c;今天记录一下mac系统下如何安装mvnd同时通过maven-helper插件配置mvnd命令&#xff0c;提升编译速度&#xff1b; 0、前言 如果你正在开发一个由大量模块组成的大型项目&#xff0c;Gradle可以让大型项目构建的更快&…

扩展模块--QWebEngine功能及架构解析

Qt WebEngine 模块在 Qt 6.9 中提供了基于 Chromium 的网页渲染引擎功能。 一、主要功能 核心功能 网页渲染引擎 基于 Chromium 项目的最新稳定版本 支持现代 HTML5、CSS3 和 JavaScript 标准 主要组件 QWebEngineView - 用于显示网页内容的 widget QWebEnginePage - 表示…

Spring Boot Admin监控

1、概述 Spring Boot Admin 是一款用于监控 Spring Boot 应用程序的开源工具&#xff0c;可帮助开发者实时监控应用的运行状态、性能指标、日志信息等。 2、核心功能 应用状态监控 显示应用是否在线、启动时间、运行时长等基础信息。监控 JVM 相关指标&#xff1a;内存使用情…

【QT】QTableView自定义样式:仅显示行间隔、隐藏列间隔、表头样式、表格样式、单行选中等

目录 0.背景 1.详细代码 0.背景 项目需要&#xff0c;我有一个自定义的类Steer_Electrode_Table&#xff0c;是一个QTableView&#xff1b; 记录一下QTableView修改前后的样式&#xff0c;仅供参考 看一下我修改前后的样式对比 1.详细代码 void Steer_Electrode_Table::init…

mvnd-快速打包maven项目

mvnd 一、简介一、定位与背景二、核心架构与加速原理三、使用注意事项 二、下载安装三、idea集成mvnd插件四、打包测试时长 一、简介 mvnd&#xff08;Maven Daemon&#xff09;是Apache Maven团队推出的高性能构建工具&#xff0c;旨在解决传统Maven构建速度慢的问题。它通过…

C++ 中的尾调用优化TCO:原理、实战与汇编分析

C尾调用优化 什么是尾调用&#xff1f;描述无返回值函数最后调用函数也可能做尾调用优化 例子关键特征&#xff08;写法&#xff09; 尾调用和尾递归的区别&#xff1f;为什么尾调用优化可以提高效率&#xff1f;通常的递归调用&#xff1a;尾调用优化&#xff1a;为什么栈帧复…

Java集合 - ArrayList底层源码解析

下面开始对 Java 中 ArrayList 的深度源码分析&#xff0c;基于 JDK 8 的实现&#xff08;后续版本略有差异&#xff0c;但核心逻辑一致&#xff09;。我们将从 类结构、扩容机制、核心方法实现、性能优化、线程安全问题 等角度进行详细解析 一、类结构与核心字段 1. 类继承关…

【Qt】Qt控件

文章目录 Qt控件Layout Spacer垂直布局QVBoxLayout水平排列布局QHBoxLayout网格布局 QGridLayout表格布局 QFormLayout Button Contain命令按钮Push Button工具按钮Tool Button单选按钮Radio Button复选框按钮Check Box命令链接按钮Command Link Button按钮盒Button Box组合框G…