如何从git仓库中删除文件?

我已经添加了一个名为"file1.txt" git "file1.txt"的文件。 之后,我犯了这个错误,添加了一个名为dir1dir2目录,并将它们交给了git repo。

现在回购有"file1.txt"dir1dir2
如何删除"file1.txt"而不影响其他人,如dir1dir2

使用git rm

 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 

git rm file.txt从回购中删除文件,但也从本地文件系统中删除

要从repo中删除文件, 而不从本地文件系统中删除它,请使用:
git rm --cached file.txt

下面的确切情况是我使用git来维护我公司网站的版本控制,但“mickey”目录是一个tmp文件夹,与CAD开发人员共享私人内容。 当他需要巨大的文件,我做了一个私人的,无链接的目录,并ftpd在那里的文件,他可以通过浏览器获取。 忘记我做了这个,我后来从网站的基本目录执行git add -A 。 随后, git status显示需要提交的新文件。 现在我需要从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]$ 

更新:这个答案是获得一些stream量,所以我想我会提到我的其他Git答案共享一些很好的资源: 这个页面有一个graphics,帮助神秘的Git对我来说。 “Pro Git”一书在线 ,对我有很大的帮助。

如果您的文件已经在GitHub上, 您现在(2013年7月)可以直接从Web GUI中删除它!

只需查看存储库中的任何文件,单击顶部的垃圾桶图标,然后像进行任何其他基于Web的编辑一样进行删除。

删除按钮

(提交将反映删除该文件):

提交删除

就这样,它消失了。

有关这些function的帮助,请务必阅读我们关于创build , 移动 , 重命名和删除文件的帮助文章。

注意:因为它是一个版本控制系统,所以如果你以后需要恢复文件的话,Git总是会回来的。

最后一句话意味着被删除的文件仍然是历史的一部分,你可以很容易地恢复它(但还没有通过GitHub网页界面):

请参阅“ 恢复Git仓库中删除的文件 ”。

这是我唯一的select。

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

注意:用您的文件名或文件typesreplace* .sql。 要非常小心,因为这将通过每一个提交和撕裂这种文件types。

更一般地说, git help至less可以帮助至less这样简单的问题:

 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 rm -r foldername 

如果您想要从回购库中删除文件,但将其保留在文件系统中(将不会跟踪):

 bykov@gitserver:~/temp> git rm --cached file1.txt bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo" 

如果要从回购和文件系统中删除文件,则有两个选项:

  1. 如果文件在索引中没有变化:

     bykov@gitserver:~/temp> git rm file1.txt bykov@gitserver:~/temp> git commit -m "remove file1.txt" 
  2. 如果文件在索引中进行了更改:

     bykov@gitserver:~/temp> git rm -f file1.txt bykov@gitserver:~/temp> git commit -m "remove file1.txt" 

git rm将只从现在开始删除这个分支上的文件,但它仍然保留在历史logging中,git会记住它。

正确的做法是使用git filter-branch ,正如其他人在这里提到的那样。 它将重写分支历史logging中的每个提交以删除该文件。

但是,即使这样做后,git可以记住它,因为可以在reflog,遥控器,标签等引用它。

如果你想完全消除它,我build议你使用git forget-blob

https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/

这很容易,只要做git forget-blob file1.txt

这将删除每个引用,做git filter-branch ,最后运行git垃圾回收器git gc完全摆脱这个文件在你的回购。

另一种方法是,如果要使用rm命令从本地文件夹中删除文件,然后将更改推送到远程服务器。

 rm file1.txt git commit -a -m "Deleting files" git push origin master 

如果您有GitHub for Windows应用程序,则可以通过以下5个简单步骤删除文件:

  • 点击同步。
  • 点击文件所在的目录,并select你的最新版本的文件。
  • 点击工具,然后select“在这里打开一个shell”。
  • 在shell中,input:“rm {filename}”并回车。
  • 提交更改并重新同步。

在我的情况下,我试图在几次提交后删除github上的文件,但保存在计算机上

 git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD git push --force -u origin master 

后来这个文件被忽略了

删除特定的文件

git rm文件名

以单次recursion方式从目录中清除所有未跟踪的文件

git clean -fdx

  1. 首先,从本地存储库中删除文件。

    git rm -r文件名

    或者,只从本地存储库中删除文件,但从文件系统中删除

    git rm –cached文件名

  2. 其次,提交更改到本地存储库。

     git commit -m "unwanted files or some inline comments" 
  3. 最后,将本地更改更新/推送到远程存储库。

     git push 

如果你没有在你的本地仓库中存档,而是在git仓库中,那么只需通过web界面在git仓库中打开文件,然后在界面的右上angularfind删除button。 点击这里,查看界面删除选项