从Git历史中删除误提交文件并保留本地文件的解决方案

 更新时间:2025年10月21日 09:52:32   作者:尽兴-  
本文介绍了如何在Git项目中删除误提交的文件(如node_modules/.env等),包括用git rm --cached保留本地文件、更新.gitignore防止再次提交,以及用git filter-repo等工具彻底清除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

最佳实践

提交前检查变更

git status
git diff --cached

使用预提交钩子(pre-commit)

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

敏感信息处理

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

总结

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

到此这篇关于从Git历史中删除误提交文件并保留本地文件的解决方案的文章就介绍到这了,更多相关Git历史中删除误提交文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 知识蒸馏联邦学习的个性化技术综述

    知识蒸馏联邦学习的个性化技术综述

    这篇文章主要为大家介绍了知识蒸馏联邦学习的个性化技术综述,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Git原理和常用操作

    Git原理和常用操作

    今天小编就为大家分享一篇关于Git原理和常用操作的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • git 将本地文件(夹)上传到gitee指定分支的处理方法

    git 将本地文件(夹)上传到gitee指定分支的处理方法

    这篇文章主要介绍了git 将本地文件(夹)上传到gitee指定分支的处理方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 低版本VS项目在VS2019无法正常编译的问题

    低版本VS项目在VS2019无法正常编译的问题

    这篇文章主要介绍了低版本VS项目在VS2019无法正常编译的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Git Commit生成与合入Patch指南分享

    Git Commit生成与合入Patch指南分享

    文章介绍了生成和应用补丁的两种方法:diff命令对比目录生成补丁(需路径一致或使用软链接),及Git format-patch生成特定提交的补丁,同时说明了使用patch命令合入补丁的步骤,包括忽略目录层级和撤销操作
    2025-08-08
  • Git忽略提交的3种方法及Git忽略规则

    Git忽略提交的3种方法及Git忽略规则

    在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则今天为大家简单介绍下Git的忽略及规则
    2018-10-10
  • 彻底卸载VSCode的方法步骤(附图文)

    彻底卸载VSCode的方法步骤(附图文)

    VSCode卸载后重新安装,会发现好像把之前的设置和配置也复原,这样就达不到重装的目的,问题就在于卸载时没有卸载干净,下面这篇文章主要给大家介绍了关于彻底卸载VSCode的方法步骤,需要的朋友可以参考下
    2023-04-04
  • 即时通讯软件在网页上启动临时对话的链接代码

    即时通讯软件在网页上启动临时对话的链接代码

    旺旺临时对话的链接,MSN临时对话的链接,Skype临时对话的链接
    2008-11-11
  • Git在Windows中安装与使用教程

    Git在Windows中安装与使用教程

    这篇文章主要介绍了Git在Windows中安装与使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 音视频基本概念和FFmpeg的简单入门教程详解

    音视频基本概念和FFmpeg的简单入门教程详解

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换,这篇文章主要介绍了音视频基本概念和FFmpeg的简单入门,需要的朋友可以参考下
    2022-04-04

最新评论