我从我的Git仓库(来自多个目录)物理上删除了许多文件。
我仍然可以看到它们的引用,如果我提交到GitHub,旧文件仍然存在。
我需要从远程存储库服务器(GitHub)以及我的本地PC中删除这些引用。
如何从存储库中删除这些引用?
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 rm filename
git commit -m "Remove files" #everything staged will be committed
现在,如果您在没有使用"git rm"的情况下删除了它们
您应该先将它们放入暂存区:
git add -u
git commit -m "Remove files"
git filter-branch
请注意,大多数情况下您实际上不需要使用filter-branch命令,因为它是相当高级的东西。最好的使用案例是,如果您已经提交了带有一些关键信息(如您的信用卡号和过期日期)的文件,并将此文件推送到公共存储库,则必须使用filter branch更改此值为某些无关紧要的值或删除文件不足够 - 您必须使用filter branch;) ...并祈祷没有人足够快地从您的存储库提取;) ...然后无论如何报告您的信用卡被盗...;)它们应该显示为已删除的索引。只需将它们暂存,它们就会被删除。
使用 git add -i 可以使暂存过程更快。