如何从存储库中删除“file1.txt”?
当前回答
首先,如果您使用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中恢复已删除的文件”。
其他回答
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”这本书是在线的,对我帮助很大。
如果要从存储库中删除文件,但将其保留在文件系统中(将被取消跟踪):
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.textbykov@gitserver:~/temp>gitcommit-m“删除file1.txt”如果文件在索引中进行了更改:bykov@gitserver:~/temp>git rm-f file1.textbykov@gitserver:~/temp>gitcommit-m“删除file1.txt”
对于git rm不够,需要从历史中删除文件的情况:正如git filter分支手册页面现在本身建议使用git filter repo,而我今天不得不这样做,这里有一个使用该工具的示例。它使用示例回购https://example/eguser/eg.git
将存储库克隆到新目录gitclone中https://example/eguser/eg.git除了不需要的文件,保留所有内容。git filter repo--path file1.xt--反转路径将远程存储库原点添加回:git远程添加原点https://example/eguser/eg.git.gitfilter repo工具通过设计删除远程远程信息,并建议一个新的远程repo(参见第4点)。这对于大型共享回购来说是有意义的,但对于删除一个新添加的文件来说,可能是过度的,如本例所示。当对本地内容满意时,用它替换远程。git push——强制-u原点主控。由于历史已更改,需要强制。
还请注意,在加载和更改存储库历史记录之前,有关团队和项目动态的链接手册中有一个有用的“干运行”选项和一个很好的讨论。
如果您想使用rm命令从本地文件夹中删除文件,然后将更改推送到远程服务器,则可以使用另一种方法。
rm file1.txt
git commit -a -m "Deleting files"
git push origin master
根据文件。
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
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别