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


当前回答

gitrm file.txt从repo中删除文件,但也从本地文件系统中删除该文件。

要从存储库中删除文件而不从本地文件系统中删除,请使用:git rm--缓存文件.txt

下面的确切情况是,我使用git来维护我公司网站的版本控制,但“mickey”目录是一个tmp文件夹,用于与CAD开发人员共享私人内容。当他需要庞大的文件时,我创建了一个私有的、未链接的目录,并在那里ftpd文件,供他通过浏览器获取。我忘记了这一点,后来在网站的基本目录中执行了git add-a。随后,git状态显示了需要提交的新文件。现在我需要从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”这本书是在线的,对我帮助很大。

其他回答

首先,如果您使用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中恢复已删除的文件”。

这是我唯一的选择。

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

注意:用文件名或文件类型替换*.sql。要非常小心,因为这会经过每次提交并删除此文件类型。

编辑:注意-在这个命令之后,您将无法推或拉-您将看到拒绝“不相关的历史记录”,您可以使用“git push--force-u origin master”来推或拉

https://stackoverflow.com/a/2047477/14508423https://stackoverflow.com/a/19666677/14508423非常相似,两者都尝试了。没有什么Git一直在跟踪文件。(我使用vscode,因此文件立即标记为U(未跟踪)或A(已添加))

这样做https://stackoverflow.com/a/53431148/14508423整个类别解决了这个问题。

这样做可以从git中删除文件,并让git忘记它:

**manually add the file name to .gitignore**

git rm --cached settings.py    
git commit -m "remove settings.py"
git push origin master
git rm -r --cached .
git add .
git commit -m "Untrack files in .gitignore"

ps:每次失败时,我都试图删除包含敏感信息的文件,如令牌(.env和settings.py文件)。但它可以处理随机文件

根据文件。

git rm—缓存文件1.xt

当涉及到敏感数据时,最好不要说您删除了该文件,而是将其包含在最后一次已知提交中:

0.修改上次提交

git commit --amend -CHEAD

如果要从所有git历史记录中删除该文件,根据文档,应执行以下操作:

1.将其从本地历史记录中删除

git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \  --prune-empty --tag-name-filter cat -- --all
# Replace PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA with the path to the file you want to remove, not just its filename

不要忘记将此文件包含在.gitignore中(如果它是一个您永远不想共享的文件(例如密码…):

echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"

3.如果需要从遥控器中移除

git push origin --force --all

4.如果您还需要将其从标签发布中删除:

git push origin --force --tags

我尝试了许多建议的选项,但似乎都不起作用(我不会列出各种问题)。我最终所做的(对我来说)简单而直观的工作是:

将整个本地回购转移到其他地方再次将回购从主机克隆到本地驱动器将文件/文件夹从#1中的原始副本复制回#2中的新克隆确保问题大文件不存在或排除在.gitignore文件中执行通常的gitadd/gitcommit/gitpush