首页 文章

忽略已经提交到Git存储库的文件[重复]

提问于
浏览
2267

这个问题在这里已有答案:

我有一个已经初始化的Git存储库,我添加了一个 .gitignore 文件 . 如何刷新文件索引以便忽略我想忽略的文件?

21 回答

  • 4

    到处复杂的答案!

    只需使用以下内容

    git rm -r --cached .
    

    它将从原点删除您要忽略的文件,而不是从计算机上的主文件中删除!

    之后,只需提交并推送!

  • 6

    正如dav_i所说,为了将文件保存在repo中并将其从更改中删除而不创建额外的提交,您可以使用:

    git update-index --assume-unchanged filename
    
  • 3763

    要取消已经添加/初始化到存储库的单个文件,即停止跟踪文件但不从系统中删除它: git rm --cached filename

    要解开 .gitignore 中现在的每个文件:

    First commit any outstanding code changes ,然后运行此命令:

    git rm -r --cached .
    

    这将从索引(暂存区域)中删除所有已更改的文件,然后运行:

    git add .
    

    承诺:

    git commit -m ".gitignore is now working"
    

    要撤消 git rm --cached filename ,请使用 git add filename .

    确保在运行git add之前提交所有重要更改 . 否则,您将丢失对其他文件的任何更改 .

  • 534

    如果您试图忽略对已在存储库中跟踪的文件的更改(例如,您需要为本地环境更改的dev.properties文件,但您永远不想检查这些更改),而不是您想要执行的操作是:

    git update-index --assume-unchanged <file>
    

    如果您想再次开始跟踪更改

    git update-index --no-assume-unchanged <file>
    

    git-update-index(1) Manual Page .

    如果你需要通过git-reset(via)来保持更新,请查看更新索引的 skip-worktreeno-skip-worktree 选项


    更新:由于人们一直在询问,这里有一个方便的(以及下面评论的更新)别名,用于查看当前工作区中当前“忽略”( - 保持不变)的文件

    $ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
    
  • 23

    要取消已经添加/初始化到存储库的文件,即停止跟踪文件但不从系统中删除它: git rm --cached filename

  • 8

    是 - .gitignore 系统只忽略当前不受git版本控制的文件 .

    即如果您已经使用 git-add 添加了一个名为 test.txt 的文件,则将 test.txt 添加到 .gitignore 仍将导致跟踪对 test.txt 的更改 .

    您必须首先 git rm test.txt 并提交更改 . 只有这样才会忽略对 test.txt 的更改 .

  • 25

    Remove trailing whitespace in .gitignore

    另外,请确保.gitignore中没有尾随空格 . 我得到了这个问题,因为我正在寻找答案,然后我有一种有趣的感觉,我应该打开编辑器,而不仅仅是cat'ing .gitignore . 从结尾删除了一个额外的空间 poof 它现在有效:)

  • 49

    我按照这些步骤

    git rm -r --cached .
    git add .
    git reset HEAD
    

    之后,git删除应忽略的所有文件(在我的情况下为* .swp) .

  • 9

    如果要停止跟踪文件而不删除本地系统中的文件,我更喜欢忽略 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
    

    谢谢

  • 18

    要从跟踪中删除几个特定文件:

    git update-index --assume-unchanged path/to/file
    

    如果您想再次开始跟踪它:

    git update-index --no-assume-unchanged path/to/file
    
  • 21

    不知道'回答'命令做了什么,我跑了,很让我感到沮丧 . 它以递归方式从git仓库中删除每个文件 .

    Stackoverflow救援...... How to revert a "git rm -r ."?

    git reset HEAD
    

    诀窍,因为我有未提交的本地文件,我不想覆盖 .

  • 36

    还有另一个建议可能是像我这样的慢人=)将 .gitignore 文件放入 .git 文件夹中的存储库根 not . 干杯!

  • 79

    这些答案都不适合我 .

    代替:

    • 将文件移出git控制的目录

    • 检查删除到git

    • 将文件移回git控制目录

    将文件移回后,git会忽略它 .

    也适用于目录!

  • 27

    我遇到的另一个问题是我发布了内联评论 .

    tmp/*   # ignore my tmp folder (this doesn't work)
    

    这很有效

    # ignore my tmp folder
    tmp/
    
  • 7

    如果文件已在版本控制中,则需要手动删除它们 .

  • 19

    感谢您的回答,我能够编写这个小小的单行程来改进它 . 我在我的.gitignore和repo上运行它,没有任何问题,但是如果有人看到任何明显的问题,请发表评论 . 这应该是 git rm -r --cached 来自 .gitignore

    cat $(git rev-parse --show-toplevel)/ . gitIgnore | sed“s // $ //”| grep -v“^#”| xargs -L 1 -I {}查找$(git rev-parse --show-toplevel)-name“{}”| xargs -L 1 git rm -r --cached

    请注意,你会得到很多 fatal: pathspec '<pathspec>' did not match any files . 那个's just for the files which haven'被修改了 .

  • 351

    我发现.gitignore有一个奇怪的问题 . 一切都到位,似乎是正确的 . 我的.gitignore被“忽略”的唯一原因是,该行结束了Mac格式(\ r \ n) . 所以在使用正确的行结尾保存文件后(在vi中使用:set ff = unix)一切都像魅力一样!

  • 39

    这里没有提到的另一个问题是,如果你在Windows记事本中创建了你的.gitignore,我发现它在其他平台上看起来就像是胡言乱语 . 关键是要确保在记事本中将编码设置为ANSI,(或者像我一样在linux上创建文件) .

    从我在这里的回答:https://stackoverflow.com/a/11451916/406592

  • 12

    在我的服务器linux服务器上(在我的本地开发mac上不是这样),只要我不添加星号,就会忽略目录:

    www / archives / *

    我不知道为什么但它让我松了几个小时,所以我想分享......

  • 22

    如果 .gitignore 似乎没有忽略未跟踪文件,那么还要注意的一点是,您不应该在与忽略相同的行上发表评论 . 所以这没关系

    # ignore all foo.txt, foo.markdown, foo.dat, etc.
    foo*
    

    但这不起作用:

    foo*   # ignore all foo.txt, foo.markdown, foo.dat, etc.
    

    .gitignore 将后一种情况解释为“忽略名为 "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc." 的文件,当然,你没有 .

  • 26

    如果您需要停止跟踪大量被忽略的文件,可以组合一些命令:

    git ls-files -i --exclude-standard | xargs -L1 git rm --cached

    这将停止跟踪被忽略的文件 . 如果要从文件系统中实际删除文件,请不要使用 --cached 选项 . 您还可以指定限制搜索的文件夹,例如:

    git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm

相关问题