【问题标题】:git remove file from repository but leave it on file systemgit 从存储库中删除文件,但将其保留在文件系统中
【发布时间】:2011-09-29 19:00:10
【问题描述】:

我尝试从 git 存储库中删除不必要的文件。该文件最初是添加的,现在它们位于多个分支中。我想要的只是停止跟踪该文件中的更改,我不在乎应该保留哪些更改,但我需要将这些文件保留在文件系统上。

我试过了

git filter-branch --index-filter "git rm --cached --ignore-unmatch file_to_remove" HEAD

但是从文件系统中删除的文件是不需要的。

【问题讨论】:

  • 我通常在运行该命令之前将文件复制到某处。 git 删除它们后,我将它们添加到 .gitignore 中,然后将副本移回。
  • 嗯,不错的技巧。没想到
  • @misha 你想停止跟踪它们,还是从存储库中完全删除它们?您在问题中说一件事,在评论中说另一件事。
  • @andy,我可能说错了存储库。我想让这种情况像git add 这样的文件从未被调用过。

标签: git


【解决方案1】:

只是:

git rm --cached file [file ...]

当然,您需要确保将违规文件添加到您的.gitignore,这样它们就不会立即被重新提交

【讨论】:

  • 我想从所有分支的存储库中完全删除它们。当我按照你说的做时,文件停止被跟踪,但我无法切换分支,git 说File level merge required. Stay on branch <branch_name>
【解决方案2】:

如果您想将文件保留在存储库中,可以使用:
git update-index --assume-unchanged <fileName>

这会将文件的当前版本保留在索引中,但您可以随意更改它,git 会忽略这些更改。

【讨论】:

  • 我发现他的方法仅作为临时解决方法是好的。您将无法签出另一个文件内容与当前分支不同的分支。
【解决方案3】:

为每个分支检查并运行 git clean

git-clean - 从工作树中删除未跟踪的文件

从当前目录开始,通过递归删除不受版本控制的文件来清理工作树。

https://git-scm.com/docs/git-clean

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 2020-05-15
    • 2020-03-23
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2011-01-04
    相关资源
    最近更新 更多