我把以前由 Git 跟踪的文件放在.gitignore 列表中. 但是,文件在编辑后仍然显示在 git 状态。


当前回答

在我的案例中,我在几个目录中有几个.lock 文件,我需要删除。

git rm -r --cached **/*.lock

这样做,在我所在的“根”下进入每个文件夹,并排除所有符合模式的文件。

其他回答

下面的命令系列将从 Git 索引中删除所有项目(不是工作目录或本地存储库),然后更新 Git 索引,同时遵守 Git 忽略。

首先:

git rm -r --cached .
git add .

然后:

git commit -am "Remove ignored files"

或者作为一个单线:

git rm -r --cached . && git add . && git commit -am "Remove ignored files"

为文件 / 文件夹执行下列步骤:

删除文件:

需要添加该文件到.gitignore. 需要删除该文件使用命令(git rm --cached 文件名)。 需要运行(git add.). 需要(commit -m)“文件删除”。 最后,(git push)。

例如:

我想删除 test.txt 文件. 我偶然推到 GitHub 并想删除它. 命令将如下:

首先,在.gitignore 文件中添加“test.txt”

git rm --cached test.txt
git add .
git commit -m "test.txt removed"
git push

删除文件夹:

需要添加该文件夹到.gitignore 文件夹. 需要删除该文件夹使用命令(git rm -r --cached 文件夹名称)。 需要运行(git add.). 需要(commit -m)“文件夹删除”。 最后,(git push)。

例如:

我想删除.idea 文件夹/目录. 我偶然推到 GitHub 并想删除它。

首先,在.gitignore 文件中添加.idea

git rm -r --cached .idea
git add .
git commit -m ".idea removed"
git push

如果有人在Windows上有艰难的时间,你想忽略整个文件夹,请在文件探测器上转到所需的“文件夹”,右键单击并进行“Git Bash Here”(Git for Windows 应该安装)。

执行此命令:

git ls-files -z | xargs -0 git update-index --assume-unchanged

我喜欢JonBrave的答案,但我有足够的工作目录,承诺 - 一个让我有点害怕,所以这里是我做的事情:

git config --global alias.exclude-ignored '!git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached &&  git ls-files -z --ignored --exclude-standard | xargs -0 git stage &&  git stage .gitignore && git commit -m "new gitignore and remove ignored files from index"'

打破它:

git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached
git ls-files -z --ignored --exclude-standard | xargs -0 git stage
git stage .gitignore
git commit -m "new gitignore and remove ignored files from index"

删除被忽略的文件从索引阶段.gitignore 和您刚刚删除的文件承诺

我用 git filter-branch 完成了这一点,我所使用的准确命令从 man 页面上取出:

警告:此将从您的整个历史中删除文件

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD

这个命令将恢复整个命令历史,在每个命令之前执行 git rm 以便摆脱所指定的文件. 不要忘记在运行命令之前备份它,因为它将失去。