【问题标题】:Remove references of physically removed files from remote Git repository从远程 Git 存储库中删除物理删除文件的引用
【发布时间】:2011-03-28 11:41:54
【问题描述】:

我已经从我的 Git 存储库(来自许多不同的目录)中物理删除了很多文件。

我仍然可以看到他们的引用,如果我向 GitHub 提交,旧文件仍然存在。

我需要从远程 repo 服务器 (GitHub) 以及我的本地 PC 中删除这些引用。

如何从存储库中删除这些引用?

【问题讨论】:

  • 正如您可能从下面的不同答案中猜到的那样,您的问题有些模棱两可 - 您的意思是您希望这些文件根本不出现在您的 GitHub 存储库中,即使在历史记录中?或者您只是希望它们在 GitHub 上的当前版本中被删除?

标签: git github git-push


【解决方案1】:

您需要创建一个“提交”(新版本的 git 术语)删除这些文件,然后将其推送到 GitHub。我猜如果你输入git status,你会看到这样的:

# On branch master
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    old-file.txt
#   deleted:    another-old-file.txt
#   deleted:    unneeded.c

如果git status 的输出中没有列出其他更改,那么这样做是安全的:

git add -u
git commit -m "Delete many old files"

... 然后推送到 GitHub。 (git add -u 表示要为下一次提交准备对 git 正在跟踪的文件的任何更改,其中将包括您在本地手动删除的这些文件。)

但是,如果该输出中列出了其他更改,最好尝试更精确的内容,例如此处的建议:

以后最好先删除带有git rm的文件:)

【讨论】:

    【解决方案2】:

    如果你想从仓库的所有提交中删除一个文件,你需要git filter-branch。使用它的示例可以在整个互联网上找到,例如在GitHub

    【讨论】:

      【解决方案3】:

      如果您正在谈论删除文件并提交此删除,那么您应该使用

      git rm filename
      

      此命令将删除文件本身并立即将删除进行提交。因此,在这种情况下,您只需执行

      git commit -m "Remove files" #everything staged will be committed
      

      顺便说一句,当您想要移动或重命名文件时也是如此。不要使用 shell move 命令,而是使用“git mv [source] [destination]”

      现在,如果您在不使用“git rm”的情况下删除了它们

      你应该先上演它们:

      git add -u
      git commit -m "Remove files"
      

      现在,如果您希望它们从整个历史记录中消失,因此不会提及这些文件,那么您必须使用

      git filter-branch 
      

      Git filter-branch documentation

      请注意,大多数时候您实际上不需要使用 filter-branch 命令,因为它是非常高级的东西。最好的示例用例是,如果您提交了包含一些关键信息(例如您的信用卡号和到期日期)的文件,并将此文件推送到公共仓库。在这种情况下,将此值更改为一些不相关的值或删除文件是不够的 - 您必须使用过滤器分支;) ...并祈祷没有人足够快地从您的回购中获取;) ...然后将您的信用卡报告为被盗...;)

      【讨论】:

        【解决方案4】:

        它们应该在您的索引中显示为已删除。只需暂存它们,它们就会被删除。

        使用 git add -i 加快暂存过程。

        【讨论】:

          猜你喜欢
          • 2014-11-19
          • 2012-11-28
          • 2012-08-31
          • 2013-06-03
          • 2017-08-15
          • 2013-02-10
          • 1970-01-01
          • 2014-06-04
          相关资源
          最近更新 更多