Git—取消文件追踪

77 阅读2分钟

Git

项目里,本来想取消追踪文件,但是发现把文件添加到 .gitignore 文件并不生效,原因是如果文件已经被git追踪,那么需要先取消对文件的追踪并提交,然后再在 .gitignore 文件加入目录或文件名,才能生效

最近在项目优化过程中,将项目打包以后生成的 test.html 文件手滑直接提交到GitHub了,结果发现项目的语言占比 html直接飙升到70%,我勒个豆啊吓我一跳,然后潜意识想取消追踪这个文件,于是直接在 .gitignore 文件里加入了 test.html 文件名 ,结果一直不生效,搞得还以为出了什么问题,后来发现,如果文件没有被追踪过,那么直接添加进去可以立即生效,如果文章已经在追踪状态,那么需要先取消追踪然后再添加。

所以还是遇到有问题的不要想当然,动手搜一搜或者查一下,我就一直以为是我文件名写的有什么问题,反复看了几遍死活改不好,摸不着头脑,困惑

一、停止追踪文件

git rm --cached README.md

二、提交更改

git commit -m "chore: stop tracking README.md"

三、在 .gitignore 文件中写入文件名

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
​
node_modules
dist
dist-ssr
*.local
​
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
​
/README.md

PS:附带git忽略文件语法

#注释           .gitignore的注释
*.txt           忽略所有 .txt 后缀的文件
!src.a          忽略除 src.a 外的其他文件
/todo           仅忽略项目根目录下的 todo 文件,不包括 src/todo
build/          忽略 build/目录下的所有文件,过滤整个build文件夹;
doc/*.txt       忽略doc目录下所有 .txt 后缀的文件,但不包括doc子目录的 .txt 的文件
 
bin/:           忽略当前路径下的 bin 文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin:           忽略根目录下的 bin 文件
/*.c:           忽略 cat.c,不忽略 build/cat.c
debug/*.obj:    忽略debug/io.obj,不忽略 debug/common/io.obj和tools/debug/io.obj
**/foo:         忽略/foo, a/foo, a/b/foo等
a/**/b:         忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh    不忽略bin目录下的run.sh文件
*.log:          忽略所有 .log 文件
config.js:      忽略当前路径的 config.js 文件
 
/mtk/           忽略整个文件夹
*.zip           忽略所有.zip文件
/mtk/do.c       忽略某个具体文件