如何从 Git 存储库中删除文件?

问:

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

答1:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

使用 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

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

也很方便: git rm -r directory // 删除目录和内容

不过,这不会在其他提交中摆脱该文件。

@SaulOrtega:没错。要从以前的提交中删除文件(更改过去的历史记录),请参阅 Remove sensitive data 上的 GitHub 帮助页面。

请注意,这也会在本地删除文件。如果您只想从 repo 中删除它,请执行以下操作: git rm --cached file1.txt

值得注意的是,如果该文件包含敏感信息(例如凭据),您应该立即更改这些凭据。引用 GitHub “一旦您将提交推送到 GitHub,您应该考虑其中包含的任何数据都已被泄露。如果您提交了密码,请更改它!如果您提交了密钥,请生成一个新密钥。”

答2:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

git rm file.txt 从存储库中删除文件,但也会从本地文件系统中删除它。

要从存储库中删除文件并不将其从本地文件系统中删除,请使用: 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 ..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." 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 ..." 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]$

更新:这个答案获得了一些流量,所以我想我会提到我的 other Git answer 分享了一些很棒的资源:This page 有一张图片可以帮助我揭开 Git 的神秘面纱。 “Pro Git” book is online 对我帮助很大。

然后,您需要使用 git commit -m "Just removing file1.txt" 之类的东西来提交它,然后,如果您有一个远程存储库,请使用 git push origin master 之类的东西来推送提交。

答3:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

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

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

但是,如果您的文件已经在 GitHub 上,you can (since July 2013) 直接从 Web GUI 中删除它!

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

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

https://i.stack.imgur.com/259au.jpg

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

https://i.stack.imgur.com/fgXe9.png

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

最后一句意味着被删除的文件仍然是历史的一部分,你可以很容易地恢复它(但还不能通过 GitHub Web 界面):

请参阅“Restore a deleted file in a Git repo”。

您必须滚动到底部并点击“提交更改”才能提交删除!

这不适用于大型文本文件。服务器尝试按照屏幕截图呈现文件,然后失败并出现 500 错误。

这个答案是指 github,问题是关于 git repo。不是如何使用github接口。

答4:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

这是对我有用的唯一选择。

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'

注意:将 *.sql 替换为您的文件名或文件类型。要非常小心,因为这将通过每个提交并撕掉这个文件类型。

编辑:注意-在此命令之后您将无法推送或拉取-您将看到拒绝“无关历史”您可以使用“git push --force -u origin master”进行推送或拉取

这是一个很好的答案,但请注意,与其他答案相比,此命令会重写提交历史记录并删除与模式匹配的文件的所有跟踪。如果您发现您不小心提交了一些敏感信息(并且,如果需要,可以成功使用 --force 重写已推送到的任何远程存储库的历史记录),这将特别有用。

这正是我遇到的问题,经过反复试验才能正确解决。与我一起工作的一个人已经将几个大型数据库转储提交到一个 repo 中,并通过许多提交返回。这就是我在示例中使用 .sql 的原因。我的仓库变得如此臃肿和庞大,以至于 github 不再接受推送。

如果您使用的是远程主机,您需要强制提交并使用 git push --force -u origin master 推送它

@AlbertMarkovski 抱歉,我不具体。 Github 实际上不会接受推送,因为 repo 超出了他们的大小限制。至少几个 GB。他们切断了我的联系并通过电子邮件告诉我。因此,不幸的是,在这一点上,再多的强迫推动也无济于事。

@JasonGlisson 我也遇到过视频被意外添加到存储库的问题。

答5:

huntsbot.com – 高效赚钱,自由工作

此外,如果它是要删除的文件夹以及后续的子文件夹或文件,请使用:

git rm -r foldername

这也会从本地删除文件夹! Use git rm --cached -r

答6:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

更一般地说,git help 至少可以帮助解决如下简单的问题:

zhasper@berens:/media/Kindle/documents$ git help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]

The most commonly used git commands are:
   add        Add file contents to the index
   :
   rm         Remove files from the working tree and from the index

对于更复杂的事情,我发现 git help 令人困惑,但它对简单的事情有好处:)

对于 git noobs 来说实际上并不是那么好,因为“索引”不是 git noobs 熟悉的概念。我是从 git noob 的个人经历说的 :) 另外,我觉得说 rm 暂存文件以供删除 而不是 从索引中删除(尽管对于新手来说仍然毫无意义)。

同意 romkyns:“从工作树和索引中删除文件”的描述对我来说听起来不像是从 repo 中删除文件的一种方式。也许如果我更好地理解 git 它会。相反,听起来您只是在取消暂存文件(并且可以选择将它们从工作树中删除——这必然会影响回购吗?)

答7:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

如果您想从 repo 中删除文件,但将其保留在文件系统中(将不被跟踪):

bykov@gitserver:~/temp> git rm --cached file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo"

如果要从 repo 和文件系统中删除文件,则有两个选项:

如果文件没有更改暂存于索引中:bykov@gitserver:~/temp> git rm file1.txt bykov@gitserver:~/temp> git commit -m “remove file1.txt” 如果文件有更改暂存于索引:bykov@gitserver:~/temp> git rm -f file1.txt bykov@gitserver:~/temp> git commit -m “remove file1.txt”

答8:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

git rm 从现在开始只会删除此分支上的文件,但它会保留在历史记录中,git 会记住它。

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

但是,即使在这样做之后,git 仍然可以记住它,因为在 reflog、remote、tags 等中可以引用它。

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

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

这很简单,只需执行 git forget-blob file1.txt。

这将删除所有引用,执行 git filter-branch,最后运行 git 垃圾收集器 git gc 以完全摆脱您的存储库中的这个文件。

在 2021 年,我尝试了这个,但似乎没有用。我仍然可以看到文件历史记录。相反,我最终用 git mv 重命名了文件,从提交的文件中清除了所有内容。

答9:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

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

git rm --cached file1.txt

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

git rm file1.txt

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

git rm -r foldername

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

git rm -r parentFolder/childFolder

然后,您可以像往常一样commit 和push。但是,如果您想恢复已删除的文件夹,您可以按照以下步骤操作:recover deleted files from git is possible.

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

Read more on official doc.

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

答10:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

Johannchopin 编辑的 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!

答11:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

另一种方法是,如果您想使用 rm 命令从本地文件夹中删除文件,然后将更改推送到远程服务器。

rm file1.txt

git commit -a -m "Deleting files"

git push origin master

原文链接:https://www.huntsbot.com/qa/veY1/how-do-i-delete-a-file-from-a-git-repository?lang=zh_CN&from=csdn

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值