忽略已提交到Git仓库的文件

忽略已提交到Git仓库的文件

技术背景

在使用Git进行版本控制时,有时我们需要忽略已经提交到仓库的文件,例如配置文件、临时文件等。.gitignore 文件只能忽略尚未被纳入版本控制的文件,对于已经提交的文件,需要额外的操作来停止跟踪它们。

实现步骤

忽略单个文件

若要停止跟踪一个已添加到仓库的文件,但不将其从系统中删除,可使用以下命令:

1
git rm --cached filename

忽略 .gitignore 中的所有文件

首先提交所有未完成的代码更改,然后执行以下命令:

1
git rm -r --cached .

此命令会将所有更改的文件从索引(暂存区)中移除。接着执行:

1
git add .

最后进行提交:

1
git commit -m ".gitignore is now working"

撤销 git rm --cached filename

若要撤销 git rm --cached filename 操作,可使用:

1
git add filename

移除不匹配路径规范文件中列出路径的所有文件

使用以下命令移除不匹配路径规范文件(格式与 .gitignore 文件相同)中列出路径的所有文件:

1
git rm --cached --ignore-unmatch -r --pathspec-from-file .ignorelist

注意,与 .gitignore 不同,.ignorelist 不能有换行符,因为 git 会认为空模式不是有效的路径规范项。

忽略已跟踪文件的更改

若要忽略仓库中已跟踪文件的更改(例如,开发环境的配置文件),可使用:

1
git update-index --assume-unchanged <file>

若要重新开始跟踪更改:

1
git update-index --no-assume-unchanged <file>

查看当前被 “忽略”(--assume-unchanged)的文件

可设置一个便捷的别名来查看当前被 “忽略” 的文件:

1
git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"

移除特定文件的跟踪

若要移除特定文件的跟踪:

1
git update-index --assume-unchanged path/to/file

若要重新开始跟踪:

1
git update-index --no-assume-unchanged path/to/file

停止跟踪大量被忽略的文件

可结合以下命令停止跟踪大量被忽略的文件:

1
git ls-files -i --exclude-standard | xargs -L1 git rm --cached

若要从文件系统中实际删除文件,可去掉 --cached 选项。也可以指定一个文件夹来限制搜索范围,例如:

1
git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm

核心代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 忽略单个文件
git rm --cached filename

# 忽略 .gitignore 中的所有文件
git rm -r --cached .
git add .
git commit -m ".gitignore is now working"

# 撤销 git rm --cached filename
git add filename

# 移除不匹配路径规范文件中列出路径的所有文件
git rm --cached --ignore-unmatch -r --pathspec-from-file .ignorelist

# 忽略已跟踪文件的更改
git update-index --assume-unchanged <file>
git update-index --no-assume-unchanged <file>

# 查看当前被 “忽略” 的文件
git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"

# 移除特定文件的跟踪
git update-index --assume-unchanged path/to/file
git update-index --no-assume-unchanged path/to/file

# 停止跟踪大量被忽略的文件
git ls-files -i --exclude-standard | xargs -L1 git rm --cached

最佳实践

  • 在执行 git add . 之前,确保已提交所有重要更改,否则可能会丢失其他文件的更改。
  • 确保 .gitignore 文件中没有尾随空格,这可能会导致忽略规则失效。
  • .gitignore 文件放在仓库根目录,而不是 .git 文件夹中。
  • 注意 .gitignore 文件的编码和换行符格式,不同操作系统可能会有影响。

常见问题

  • git rm -r --cached . 误操作如何恢复:可使用 git reset HEAD 恢复未提交的本地文件。
  • .gitignore 规则不生效:检查文件编码、换行符格式和是否有尾随空格。
  • 路径规范文件 .ignorelist 报错:确保 .ignorelist 中没有换行符。

忽略已提交到Git仓库的文件
https://119291.xyz/posts/2025-05-12.ignore-files-in-git-repository/
作者
ww
发布于
2025年5月12日
许可协议