我有一个已经初始化的 Git 仓库,并添加了一个 .gitignore
文件。如何刷新文件索引,以便忽略我想要忽略的文件?
我有一个已经初始化的 Git 仓库,并添加了一个 .gitignore
文件。如何刷新文件索引,以便忽略我想要忽略的文件?
要取消跟踪已经添加/初始化到您的存储库中的单个文件,即停止跟踪该文件但不从系统中删除它,请使用:git rm --cached 文件名
要取消跟踪现在在您的.gitignore
中的每个文件:
首先提交任何未解决的代码更改,然后运行此命令:
git rm -r --cached .
这将从 索引(index)(暂存区)中移除所有已更改的文件,然后只需运行:
git add .
提交它:
git commit -m ".gitignore is now working"
要撤销 git rm --cached 文件名
,请使用 git add 文件名
。
在运行
git add .
之前,请确保提交了您的所有重要更改。否则,您将丢失对其他文件所做的任何更改。
请注意,当您将其推送到存储库并从其他地方拉取以使这些文件仍然被跟踪时,这些文件将被删除
如果你想忽略已经被版本库追踪的文件的更改(例如,一个 dev.properties 文件需要在本地环境下更改,但你永远不想将这些更改提交),那么你需要执行以下操作:
git update-index --assume-unchanged <file>
如果你想要重新开始跟踪变更:
git update-index --no-assume-unchanged <file>
如果您需要在git-reset之后保持此功能,请查看update-index的skip-worktree
和no-skip-worktree
选项(通过)
更新: 以下是一个方便的别名,用于查看当前在本地工作区中“被忽略”(--assume-unchanged)的文件
git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
git ls-files -v
如果打印的字符是小写,那么这个文件被标记为“假定未更改”。请参考:https://dev59.com/inE95IYBdhLWcg3wUMPW#2363495 和 http://git-scm.com/docs/git-ls-files。 - dyodjiignored
别名版本: ignored = !git ls-files -v $(git rev-parse --show-toplevel) | (grep '^[[:lower:]]' || echo 'None ignored.') && echo '\nIgnore changes with: git update-index --assume-unchanged <file> \nor track again with: git update-index --no-assume-unchanged <file>'
这个命令中的toplevel部分确保它搜索整个存储库。 - Chris--assume-unchanged
无法与 git stash
配合使用:在 git stash
过程中更改会被还原,在 git stash pop
过程中也不会重新应用。详见 此问题。 - Scott Weldongit config --global alias.hidden '!git ls-files -v | grep "^[[:lower:]]"'
。 - Crhistian Ramirezgit rm --cached filename
。*.config
添加到 .gitignore
中,则可以使用 git rm --cached *.config
停止跟踪所有 *.config
文件。 - dav_igit update-index --assume-unchanged 文件名
命令。 - dav_iassume-unchanged
,或者选择 --skip-worktree
作为替代方案。 - Sebastianb是的 - .gitignore
只会忽略当前没有被 Git 版本控制的文件。
也就是说,如果您已经使用 git-add
添加了一个名为test.txt
的文件,则将test.txt
添加到.gitignore
中仍将跟踪对test.txt
的更改。
您必须先运行 git rm test.txt
并提交该更改。然后才能忽略对 test.txt
的更改。
<file>
。 我正在使用 git 版本1.8.1——如果那是问题的话。 - mujaffarsgit rm test.txt
,这里有一个更全面的答案链接:https://dev59.com/NGcs5IYBdhLWcg3wrl4Z。 - Linnea Huxford去除.gitignore文件中的末尾空格
此外,请确保您的.gitignore文件中没有末尾空格。我来到这个问题是因为我在寻找答案时,有一种奇怪的感觉,我应该打开编辑器而不仅仅是cat .gitignore文件。只需从末尾删除一个额外的空格,就行了现在它可以正常工作了 :)
echo node_modules >> .gitignore
命令时(至少在 Windows 上)。 - Khôigit rm -r --cached .
git add .
git reset HEAD
复杂答案无处不在!
只需使用以下内容
git rm -r --cached .
这将从源中删除您试图忽略的文件,而不是从计算机上的主分支!
之后只需提交并推送!
git add .
致谢:
https://dylanwooters.wordpress.com/2015/10/24/dear-git-stop-tracking-my-bin-folders/ - Benconfig/database.yml
文件。只需尝试以下操作:git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.
$ echo config/database.yml >> .gitignore
要从跟踪中删除仅有的一些特定文件:
git update-index --assume-unchanged path/to/file
如果你想再次开始跟踪它:
git update-index --no-assume-unchanged path/to/file
正如dav_i所说,为了将文件保留在版本库中但又不创建额外的提交来从更改中移除它,您可以使用:
git update-index --assume-unchanged filename
git update-index --no-assume-unchanged 文件名
- Chemical Programmer
git rm --cached filename
更加温和一些。 - Jim Morrison