协慌网

登录 贡献 社区

如何从 git repo 中删除文件?

我在 git repo 中添加了一个名为"file1.txt"的文件。之后我提交了它,添加了几个名为dir1dir2目录,并将它们提交给 git repo。

现在当前的 repo 有"file1.txt"dir1dir2
如何在不影响dir1dir2类的其他内容的情况下删除"file1.txt"

答案

使用git rm

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

git rm file.txt从 repo 中删除该文件,但也从本地文件系统中删除它

要从 repo 中删除文件而不从本地文件系统中删除它,请使用:
git rm --cached file.txt

下面的确切情况是我使用 git 维护我公司网站的版本控制,但 “mickey” 目录是一个 tmp 文件夹,用于与 CAD 开发人员共享私人内容。当他需要巨大的文件时,我创建了一个私有的,未链接的目录和 ftpd 文件,供他通过浏览器获取。忘记我做了这个,后来我从网站的基本目录中执行了一个git add -A 。随后, git status显示需要提交的新文件。现在我需要从 git 的跟踪和版本控制中删除它们......

下面的示例输出来自我刚刚发生的事情,我无意中删除了.003文件。值得庆幸的是,我不关心本地副本到.003发生了什么,但其他一些当前更改的文件是我刚刚对网站进行的更新,并且将在本地文件系统上删除史诗! “本地文件系统”= 实时网站(不是很好的做法,但却是现实)

[~/www]$ git rm shop/mickey/mtt_flange_SCN.7z.003
error: 'shop/mickey/mtt_flange_SCN.7z.003' has local modifications
(use --cached to keep the file, or -f to force removal)
[~/www]$ git rm -f shop/mickey/mtt_flange_SCN.7z.003
rm 'shop/mickey/mtt_flange_SCN.7z.003'
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
#   modified:   shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git rm --cached shop/mickey/mtt_flange_SCN.7z.002
rm 'shop/mickey/mtt_flange_SCN.7z.002'
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.002
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
[~/www]$

更新:这个答案正在获得一些流量,所以我想我会提到我的其他 Git 答案分享了几个很棒的资源: 这个页面有一个图形,帮助我揭开 Git 神秘面纱。 “Pro Git” 这本书是在线的 ,对我帮助很大。

如果您的文件已经在 GitHub 上, 您现在(2013 年 7 月)可以直接从 Web GUI 中删除它!

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

删除按钮

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

提交删除

就这样,它已经消失了。

有关这些功能的帮助,请务必阅读有关创建移动重命名删除文件的帮助文章。

注意:由于它是一个版本控制系统,如果您以后需要恢复该文件,Git 总会退缩。

最后一句意味着删除的文件仍然是历史记录的一部分,您可以轻松地恢复它(但尚未通过 GitHub Web 界面):

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