如何从存储库中删除“file1.txt”?


当前回答

删除特定文件

git-rm文件名

在一次快照中递归清理目录中所有未跟踪的文件

git-clean-fdx

其他回答

使用git rm。

如果要从Git存储库和文件系统中删除文件,请使用:

git rm file1.txt
git commit -m "remove file1.txt"

但如果您只想从Git存储库中删除文件,而不想从文件系统中删除,请使用:

git rm --cached file1.txt
git commit -m "remove file1.txt"

并将更改推送到远程回购

git push origin branch_name

gitrm从现在起只会删除该分支上的文件,但它将保留在历史中,git将记住它。

正确的方法是使用gitfilter分支,正如其他人在这里提到的那样。它将重写分支历史记录中的每个提交以删除该文件。

但是,即使在这样做之后,git也能记住它,因为在reflog、remotes、标记等中可以引用它。

如果您想在一个步骤中完全消除它,我建议您使用git forget blob

https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/

这很简单,只需git忘记blob file1.text即可。

这将删除每个引用,执行gitfilter分支,最后运行git垃圾收集器gitgc,以彻底清除repo中的此文件。

注意:如果您只想从git中删除文件,请使用以下命令:

git rm --cached file1.txt

如果您还想从硬盘中删除:

git rm file1.txt

如果要删除文件夹(该文件夹可能包含少量文件),则应使用递归命令删除,如下所示:

git rm -r foldername

如果要删除另一个文件夹中的文件夹

git rm -r parentFolder/childFolder

然后,你可以像往常一样提交和推送。但是,如果您想恢复已删除的文件夹,可以执行以下操作:从git恢复已删除文件是可能的。

来自文档:git rm[-f |--force][-n][-r][-cached][--ignore unmatch][-quiet][--]<file>…​选项<文件>…​要删除的文件。可以使用Fileglobs(例如*.c)删除所有匹配的文件。如果您希望Git扩展文件glob字符可能需要脱壳逃生。前导目录名(例如dir toremove dir/file1和dir/file2)可以用于删除目录和递归的所有子目录,但这需要要显式给定的-r选项。-f级--力覆盖最新检查。-n个--干运行实际上不要删除任何文件。相反,只需显示它们是否存在于索引中,否则将被命令删除。-r(r)当给定前导目录名时,允许递归删除。-- 此选项可用于将命令行选项与文件列表分开(当文件名可能被误认为命令行选项)。--高速缓存的使用此选项可以取消分级并仅从索引中删除路径。工作树文件,无论是否修改,都将被单独保留。--忽略取消匹配即使没有匹配的文件,也以零状态退出。-问--安静,安静gitrm通常为每个删除的文件输出一行(以rm命令的形式)。此选项将抑制该输出。

阅读更多官方文档。

首先,如果您使用git rm,特别是对于多个文件,请考虑任何通配符都将由shell解析,而不是由git命令解析。

git rm -- *.anExtension
git commit -m "remove multiple files"

但是,如果你的文件已经在GitHub上,你可以(从2013年7月起)直接从web GUI中删除它!

只需查看存储库中的任何文件,单击顶部的垃圾桶图标,然后像其他基于web的编辑一样提交删除操作。

然后在本地回购上“git pull”,这也会在本地删除文件。这使得这个答案成为从git repo中删除文件的(迂回)方式?(更不用说GitHub上的文件位于“git repo”中)


(提交将反映该文件的删除):

就这样,它消失了。有关这些功能的帮助,请务必阅读有关创建、移动、重命名和删除文件的帮助文章。注意:由于它是一个版本控制系统,如果您以后需要恢复文件,Git始终支持您。

最后一句话意味着删除的文件仍然是历史的一部分,您可以很容易地恢复它(但还没有通过GitHub web界面):

请参阅“在Git repo中恢复已删除的文件”。

约翰·肖平编辑的格雷格·休吉尔(Greg Hewgill)的回答对我很有帮助,因为我并不在乎将文件从历史中完全删除。在我的情况下,它是一个目录,所以我做的唯一更改是使用:

git rm -r --cached myDirectoryName

而不是“git rm--cached file1.txt”..后接:

git commit -m "deleted myDirectoryName from git"
git push origin branch_name

谢谢Greg Hewgill和Johannchopin!