如何从存储库中删除“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从repo中删除文件后,可以使用BFG repo Cleaner从repo历史中完全轻松地删除文件。
使用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
约翰·肖平编辑的格雷格·休吉尔(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!
更一般地,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中删除文件,请使用以下命令:
git rm --cached file1.txt
如果您还想从硬盘中删除:
git rm file1.txt
如果要删除文件夹(该文件夹可能包含少量文件),则应使用递归命令删除,如下所示:
git rm -r foldername
如果要删除另一个文件夹中的文件夹
git rm -r parentFolder/childFolder
然后,你可以像往常一样提交和推送。但是,如果您想恢复已删除的文件夹,可以执行以下操作:从git恢复已删除文件是可能的。
来自文档:git rm[-f |--force][-n][-r][-cached][--ignore unmatch][-quiet][--]<file>…选项<文件>…要删除的文件。可以使用Fileglobs(例如*.c)删除所有匹配的文件。如果您希望Git扩展文件glob字符可能需要脱壳逃生。前导目录名(例如dir toremove dir/file1和dir/file2)可以用于删除目录和递归的所有子目录,但这需要要显式给定的-r选项。-f级--力覆盖最新检查。-n个--干运行实际上不要删除任何文件。相反,只需显示它们是否存在于索引中,否则将被命令删除。-r(r)当给定前导目录名时,允许递归删除。-- 此选项可用于将命令行选项与文件列表分开(当文件名可能被误认为命令行选项)。--高速缓存的使用此选项可以取消分级并仅从索引中删除路径。工作树文件,无论是否修改,都将被单独保留。--忽略取消匹配即使没有匹配的文件,也以零状态退出。-问--安静,安静gitrm通常为每个删除的文件输出一行(以rm命令的形式)。此选项将抑制该输出。
阅读更多官方文档。
推荐文章
- 如何在git中找到原始/master的位置,以及如何更改它?
- Bower: ENOGIT Git未安装或不在PATH中
- Bitbucket上的Git:总是要求密码,即使上传了我的公共SSH密钥
- Git别名-多个命令和参数
- 如何添加一个“打开git-bash这里…”上下文菜单到windows资源管理器?
- 是否可以在Git中只提取一个文件?
- 当我做“git diff”的时候,我怎么能得到一个并排的diff ?
- 在git中如何将提交移动到暂存区?
- 如何缩小。git文件夹
- 如何在本地删除分支?
- 找到包含特定提交的合并提交
- Windows上Git文件的权限
- 如何从一个枝头摘到另一个枝头
- 如何获得在两次Git提交之间更改的所有文件的列表?
- 什么是跟踪分支?