如何从存储库中删除“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命令的形式)。此选项将抑制该输出。

阅读更多官方文档。