繁体   English   中英

从远程Git存储库中删除物理删除文件的引用

[英]Remove references of physically removed files from remote Git repository

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

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

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

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

您需要创建一个“提交”(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删除文件:)

如果要从存储库的所有提交中删除文件,则需要git filter-branch 可以在互联网上找到使用它的示例,例如在GitHub上

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

git rm filename

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

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

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

现在,如果你已经删除它们而不使用“git rm”

你应该先登台:

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

现在,如果你想让它们从整个历史中消失,那么就不会提到那些文件,那么你必须使用

git filter-branch 

Git过滤器分支文档

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

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

使用git add -i可以更快地进行分段过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM