如何从存储库中删除“file1.txt”?
当前回答
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。
如果要从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 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-r文件名或者,只从本地存储库中删除文件,而从文件系统中删除文件git rm—缓存的文件名其次,将更改提交到本地存储库。gitcommit-m“不需要的文件或一些内联注释”最后,将本地更改更新/推送到远程存储库。数字推送
如果需要从已确定的扩展名中删除文件(例如,已编译的文件),可以执行以下操作一次性删除所有文件:
git remove -f *.pyc
2022年有效的新答案。
请勿使用:
git filter-branch
推送后,此命令可能不会更改远程回购。如果您在使用它之后进行克隆,您将看到没有任何变化,回购仍然具有较大的大小。此命令已过时。例如,如果使用中的步骤https://github.com/18F/C2/issues/439,这行不通。
你需要使用
git filter-repo
步骤:
(1) 在.git中查找最大的文件:
git rev-list --objects --all | grep -f <(git verify-pack -v .git/objects/pack/*.idx| sort -k 3 -n | cut -f 1 -d " " | tail -10)
(2) Strat过滤这些大型文件:
git filter-repo --path-glob '../../src/../..' --invert-paths --force
or
git filter-repo --path-glob '*.zip' --invert-paths --force
or
git filter-repo --path-glob '*.a' --invert-paths --force
或无论您在步骤1中找到什么。
(3)
git remote add origin git@github.com:.../...git
(4)
git push --all --force
git push --tags --force
完成!
推荐文章
- 如何在git中找到原始/master的位置,以及如何更改它?
- Bower: ENOGIT Git未安装或不在PATH中
- Bitbucket上的Git:总是要求密码,即使上传了我的公共SSH密钥
- Git别名-多个命令和参数
- 如何添加一个“打开git-bash这里…”上下文菜单到windows资源管理器?
- 是否可以在Git中只提取一个文件?
- 当我做“git diff”的时候,我怎么能得到一个并排的diff ?
- 在git中如何将提交移动到暂存区?
- 如何缩小。git文件夹
- 如何在本地删除分支?
- 找到包含特定提交的合并提交
- Windows上Git文件的权限
- 如何从一个枝头摘到另一个枝头
- 如何获得在两次Git提交之间更改的所有文件的列表?
- 什么是跟踪分支?