我有一个已经初始化的Git存储库,我添加了一个.gitignore文件。我如何刷新文件索引,以便忽略我想要忽略的文件?
当前回答
我发现了一个奇怪的问题。gitignore。一切都很到位,看起来很正确。我的.gitignore被“忽略”的唯一原因是,行结尾是Mac格式(\r)。因此,在保存了具有正确行结尾的文件(在vi中使用:set ff=unix)之后,一切都变得非常迷人!
其他回答
感谢你的回答,我能够写下这个小单行来改进它。我在.gitignore和repo上运行了它,没有任何问题,但如果有人看到任何明显的问题,请评论。这应该是git rm-r--cached from.gitignore:
cat $(git rev-parse --show-toplevel)/.gitIgnore | sed "s/\/$//" | grep -v "^#" | xargs -L 1 -I {} find $(git rev-parse --show-toplevel) -name "{}" | xargs -L 1 git rm -r --cached
注意,你会得到很多致命的错误:pathspec“<pathspec>”与任何文件都不匹配。这只是针对尚未修改的文件。
正如dav_i所说,为了将文件保存在repo中,并在不创建额外提交的情况下将其从更改中删除,您可以使用:
git update-index --assume-unchanged filename
如果文件已经在版本控制中,则需要手动删除它们。
删除.gitignore中的尾随空格
另外,确保你的.gitignore中没有尾随空格。我遇到这个问题是因为我在寻找答案,然后我有一种有趣的感觉,我应该打开编辑器,而不是只键入.gitignore.从结尾处删除一个多余的空格,然后现在就开始工作了:)
要取消跟踪已添加/初始化到存储库的单个文件,即停止跟踪该文件,但不从系统中删除它,请使用:git rm--缓存文件名
要取消跟踪.gitignore中的每个文件,请执行以下操作:
首先提交所有未完成的代码更改,然后运行以下命令:
git rm -r --cached .
这将从索引(临时区域)中删除所有更改的文件,然后只需运行:
git add .
提交:
git commit -m ".gitignore is now working"
要撤消git rm--缓存的文件名,请使用git add filename。
确保在运行gitadd之前提交所有重要的更改。否则,您将丢失对其他文件的任何更改。
请小心,当您将其推送到存储库并从其他位置拉到仍在跟踪这些文件的状态时,这些文件将被删除
推荐文章
- 如何从远程Git存储库中提取并覆盖本地存储库中的更改?
- Github:导入上游分支到fork
- Git单次修订的日志
- Git在不改变提交时间戳的情况下进行改基
- VS 2017 Git本地提交数据库。每次提交时锁定错误
- 如何在过去的一些任意提交之间注入一个提交?
- 从GitHub克隆项目后拉git子模块
- GitHub上的分叉和克隆有什么区别?
- 递归地按模式添加文件
- 我如何使用notepad++(或其他)与msysgit?
- 如何将现有的解决方案从Visual Studio 2013添加到GitHub
- Git存储库中的悬垂提交和blob是什么?它们来自哪里?
- 我如何简单地从我最新的git提交创建一个补丁?
- Git显示“警告:永久添加到已知主机列表”
- 我如何检索一个回购的远程git地址?