Git 忽略所有 `.xlsx`,但保留指定 Excel 文件的方法

1. 目标

希望在 Git 仓库中:

  • 忽略所有 .xlsx 文件;
  • 但是特定跟踪一个文件:图片信息表v2.xlsx
  • 不想每次使用:
bash 复制代码
git add -f "图片信息表v2.xlsx"

而是希望执行:

bash 复制代码
git add .

时,图片信息表v2.xlsx 能够正常被加入暂存区。


2. 遇到的问题

一开始 .gitignore 中可能写了类似规则:

gitignore 复制代码
*.xlsx

这会导致所有 .xlsx 文件都被 Git 忽略,包括:

text 复制代码
图片信息表v2.xlsx

因此普通的:

bash 复制代码
git add .

不会添加这个文件。

只有使用强制添加:

bash 复制代码
git add -f "图片信息表v2.xlsx"

才成功。

这说明该文件确实被 .gitignore 规则忽略了。


3. 正确写法:忽略所有 xlsx,但排除指定文件

如果 图片信息表v2.xlsx 在仓库根目录,.gitignore 应该写成:

gitignore 复制代码
# 忽略所有 xlsx 文件
*.xlsx

# 但是不要忽略这个文件
!图片信息表v2.xlsx

注意:

  • !图片信息表v2.xlsx 必须写在 *.xlsx 后面;
  • 文件名必须完全一致;
  • 中文文件名可以用;
  • 路径分隔符要用 /,不要用 Windows 的 \

然后执行:

bash 复制代码
git add .

即可正常添加该文件。


4. 如果文件在子文件夹中

例如文件路径是:

text 复制代码
data/图片信息表v2.xlsx

.gitignore 应该写成:

gitignore 复制代码
*.xlsx

!data/图片信息表v2.xlsx

不要写成:

gitignore 复制代码
!data\图片信息表v2.xlsx

.gitignore 中路径统一使用 /


5. 如果整个文件夹也被忽略了

如果 .gitignore 中有类似规则:

gitignore 复制代码
data/

那么单独写:

gitignore 复制代码
!data/图片信息表v2.xlsx

通常不够,因为 Git 已经不继续检查 data/ 文件夹内部了。

这时应该写成:

gitignore 复制代码
data/*
!data/
!data/图片信息表v2.xlsx

含义是:

gitignore 复制代码
data/*                         # 忽略 data 文件夹下所有内容
!data/                         # 重新允许 Git 进入 data 文件夹
!data/图片信息表v2.xlsx          # 保留这个指定文件

6. 检查文件是否仍然被忽略

可以使用:

bash 复制代码
git check-ignore -v "图片信息表v2.xlsx"

如果文件在子文件夹中:

bash 复制代码
git check-ignore -v "data/图片信息表v2.xlsx"

情况一:有输出

例如:

text 复制代码
.gitignore:12:*.xlsx 图片信息表v2.xlsx

说明该文件仍然被 .gitignore 的某条规则忽略。

情况二:没有输出

说明该文件已经不再被忽略,之后可以直接:

bash 复制代码
git add .

7. 推荐最终配置

情况 A:文件在仓库根目录

gitignore 复制代码
# 忽略所有 Excel xlsx 文件
*.xlsx

# 保留指定文件
!图片信息表v2.xlsx

情况 B:文件在 data 文件夹中

gitignore 复制代码
# 忽略所有 Excel xlsx 文件
*.xlsx

# 保留指定文件
!data/图片信息表v2.xlsx

情况 C:data 文件夹整体被忽略

gitignore 复制代码
# 忽略 data 文件夹下所有内容
data/*

# 允许 Git 进入 data 文件夹
!data/

# 保留指定文件
!data/图片信息表v2.xlsx

8. 完整操作流程

修改 .gitignore 后,执行:

bash 复制代码
git status
git check-ignore -v "图片信息表v2.xlsx"
git add .
git status

如果 git check-ignore -v 没有输出,并且 git status 中显示:

text 复制代码
new file:   图片信息表v2.xlsx

说明配置成功。

然后提交:

bash 复制代码
git commit -m "track 图片信息表v2.xlsx"

9. 补充说明:已经被 Git 跟踪的文件

.gitignore 只影响"尚未被 Git 跟踪"的文件。

如果某个 .xlsx 文件以前已经被 Git 跟踪,那么即使后来写入 .gitignore,Git 仍然会继续跟踪它。

如果想停止跟踪某些已经被提交过的 .xlsx 文件,但保留本地文件,可以执行:

bash 复制代码
git rm --cached "*.xlsx"

然后重新添加需要保留的文件:

bash 复制代码
git add "图片信息表v2.xlsx"

最后提交:

bash 复制代码
git commit -m "ignore xlsx except 图片信息表v2.xlsx"

10. 关键结论

.gitignore 中可以通过 ! 规则取消忽略特定文件。

核心写法是:

gitignore 复制代码
*.xlsx
!图片信息表v2.xlsx

如果路径中有文件夹,统一使用 /

gitignore 复制代码
!data/图片信息表v2.xlsx

不要使用 Windows 风格的 \

相关推荐
深海鱼在掘金2 天前
Git 完全指南 —— 第1章:Git 概览与版本控制演进
git
Non-existent9873 天前
WPS批量清理单元格空白字符的4种方法-异常数字格式处理-实战
excel·wps
noravinsc3 天前
关于Git Flow
git
蜜獾云3 天前
在Git中配置用户名和密码
git
scx_link3 天前
通过git bash在本地创建分支,并推送到远程仓库中
开发语言·git·bash
Channing Lewis3 天前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel
南大白3 天前
IntelliJ IDEA 运行时的 JVM 本地内存溢出崩溃
git
jarreyer3 天前
【数据分析绘图】excel绘图和bi工具区别
数据挖掘·数据分析·excel
码农小旋风3 天前
Claude Code 基础用法大全:对话、分析、修改、测试、Git 和工作流
人工智能·git·chatgpt·claude
南大白3 天前
Git 撤回提交完整方案
git