赞
踩
这个问题在这里已经有了答案:如何让 Git 忘记一个被跟踪但现在位于 .gitignore 中的文件? (32 个回答) 4 年前关闭。
我有一个已初始化的 Git 存储库,我添加了一个 .gitignore 文件。如何刷新文件索引以便忽略我想要忽略的文件?
huntsbot.com – 高效赚钱,自由工作
要取消跟踪已添加/初始化到您的存储库的单个文件,ie,请停止跟踪该文件但不要将其从系统中删除,使用: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 add 之前提交所有重要更改。否则,您将丢失对其他文件的任何更改。
请注意,当您将其推送到存储库并从其他地方拉入仍然跟踪这些文件的状态时,这些文件将被删除
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
请注意之前提交所有更改,否则您将失去对所有更改文件的控制
@TravisWebb 您必须确保首先设置 .gitignore。此外,我倾向于不从索引中删除所有文件,只删除我需要使用 Fileglobs 的文件,例如 *.o
git rm -r --cached 。为我删除了比 git ignore 更多的文件:( :(。它删除了我什至没有列出的目录中的文件
很好的答案,但git rm --cached filename似乎不那么激烈恕我直言..
@JimMorrison 你没抓住重点。如果您有一个带有复杂 .gitignore 的大型项目(例如 Visual Studio 中的 C# 项目),那么找出要删除的每个单独文件是很乏味的。这三个简单的命令可以轻松解决所有问题。
huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式
如果您尝试忽略对已在存储库中跟踪的文件的更改(例如,您需要为本地环境更改但您永远不想签入这些更改的 dev.properties 文件)而不是您想要做的是:
git update-index --assume-unchanged
如果您想再次开始跟踪更改
git update-index --no-assume-unchanged
请参阅git-update-index(1) Manual Page。
如果您需要它在 git-reset (via) 之后持续存在,还可以查看 update-index 的 skip-worktree 和 no-skip-worktree 选项
更新:由于人们一直在问,这里有一个方便的(并且在下面评论后更新)别名,用于查看本地工作区中当前“忽略”哪些文件(–assume-unchanged)
$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
这是天才!非常有用。您知道是否有办法获取所有“保留”文件的列表?
这对您有用: git ls-files -v 如果打印的字符是小写,则文件标记为假定未更改。请参阅:stackoverflow.com/a/2363495/677381 和:git-scm.com/docs/git-ls-files
这是我的 ignored 别名的稍微详细的版本,它出现在我的 ~/.gitconfig 文件中: ignored = !git ls-files -v $(git rev-parse --show-toplevel) | (grep '^[[:lower:]]' || echo 'None ignored.') && echo '\nIgnore changes with: git update-index --assume-unchanged \nor track again with: git update-index --no-assume-unchanged ' 它的顶层部分确保它搜索整个存储库。
不幸的是,--assume-unchanged 不适用于 git stash:更改在 git stash 期间恢复,而在 git stash pop 期间没有重新应用。请参阅this question。
不确定mac上的语法是否不同,但我不得不稍微修改别名git config --global alias.hidden '!git ls-files -v | grep "^[[:lower:]]"'
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
要取消跟踪已添加/初始化到您的存储库的文件,即停止跟踪文件但不将其从系统中删除,请使用:git rm --cached filename
这是删除我添加、提交但后来意识到不需要跟踪的几个文件的完美方法。在将这些文件添加到 .gitignore 之后,我能够做到这一点并完美地取消跟踪它们。
提示:例如,如果您将 *.config 添加到 .gitignore,您可以执行 git rm --cached *.config 以停止跟踪所有 *.config 文件。
另请注意,这样做会删除您推送到的其他存储库中的文件,即使它保留在您的系统上。如果您只是忽略对文件的更改并且不想从其他用户的存储库中删除它们,请尝试使用 git update-index --assume-unchanged file.name
IMO,这是正确的答案。 Wiki 回答有点用,但非常严厉,尤其是考虑到这个问题。 (我会修复 wiki,但我不确定如何修复。“很快!”;)
@Olie 对这个“解决方案”要非常小心。这将删除 repo 中的文件,任何拉动此更改的人也将删除该文件。正如@dav_i 所说,最好的解决方案是assume-unchanged,或者--skip-worktree 作为替代方案。
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
是 - .gitignore 系统仅忽略当前不受 git 版本控制的文件。
即,如果您已经使用 git-add 添加了一个名为 test.txt 的文件,那么将 test.txt 添加到 .gitignore 仍会导致对 test.txt 的更改被跟踪。
您必须先 git rm test.txt 并提交该更改。只有这样,对 test.txt 的更改才会被忽略。
这并不完全正确,可以忽略跟踪文件中的更改...请参阅我的回答:stackoverflow.com/a/11366713/677381
git update-index --assume-unchanged 和 git rm --caheced 实际上并没有为我工作。我已经完成了 git rm 然后在成功忽略 后创建新文件。我正在使用 git 1.8.1 版——如果这是问题所在。
你的语法在这里是错误的。它是 git rm test.txt,这里是更全面答案的链接stackoverflow.com/questions/12661306/…
如果您的 .gitignore 不适用于某些特定文件,这是正确的答案。接受的答案将导致提交所有文件。
huntsbot.com – 高效赚钱,自由工作
删除 .gitignore 中的尾随空格
此外,请确保您的 .gitignore 中没有尾随空格。我之所以提出这个问题是因为我正在寻找答案,然后我有一种有趣的感觉,我应该打开编辑器而不是仅仅关注 .gitignore。从末尾删除了一个额外的空间,现在它可以工作了:)
我遇到了完全相同的问题,:P。因为这个,我也得到了这个问题。好在你有这个记录在这里。 +1
如果像我一样使用 vi 快速编辑 .gitignore 使用 ':set list' 来显示空白。
这发生在我做 echo node_modules >> .gitignore 时(至少在 Windows 上)
几个星期以来,我对此感到沮丧,直到我看到你的空白帖子。谢谢,解决了我的问题。
huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式
我按照这些步骤
git rm -r --cached .
git add .
git reset HEAD
之后, git 删除所有应该忽略的文件(在我的例子中是 *.swp)。
小心那个,因为它假设您要添加所有文件,除了被忽略的文件,通常情况并非如此
太棒了! +1
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
到处都是复杂的答案!
只需使用以下
git rm -r --cached .
它将从源文件中删除您试图忽略的文件,而不是从您计算机上的主文件中删除!
之后只需提交并推送!
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
如果您想停止跟踪文件而不从本地系统中删除文件,我更喜欢忽略 config/database.yml 文件。只需尝试:
git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.
现在,将此文件添加到 .gitignore 文件并提交更改。从现在开始,对 config/database.yml 所做的任何更改都不会被 git 跟踪。
$ echo config/database.yml >> .gitignore
谢谢
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
要从跟踪中删除一些特定文件:
git update-index --assume-unchanged path/to/file
如果您想再次开始跟踪它:
git update-index --no-assume-unchanged path/to/file
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
正如 dav_i 所说,为了将文件保留在 repo 中并从更改中删除它而不创建额外的提交,您可以使用:
git update-index --assume-unchanged filename
撤消:git update-index --no-assume-unchanged filename
如果您想一次性对文件夹中的所有文件执行此操作怎么办?
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。
没有一个答案对我有用。
反而:
将文件移出 git 控制的目录 检查删除到 git 将文件移回 git 控制的目录
将文件移回后,git 将忽略它。也适用于目录!
似乎唯一理智的解决方案:)
huntsbot.com – 高效赚钱,自由工作
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。