如何从git仓库中删除文件?
我已经添加了一个名为"file1.txt"
git "file1.txt"
的文件。 之后,我犯了这个错误,添加了一个名为dir1
和dir2
目录,并将它们交给了git repo。
现在回购有"file1.txt"
, dir1
和dir2
。
如何删除"file1.txt"
而不影响其他人,如dir1
和dir2
?
使用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"
如果要从回购和文件系统中删除文件,则有两个选项:
-
如果文件在索引中没有变化:
bykov@gitserver:~/temp> git rm file1.txt bykov@gitserver:~/temp> git commit -m "remove file1.txt"
-
如果文件在索引中进行了更改:
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
这很容易,只要做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
-
首先,从本地存储库中删除文件。
git rm -r文件名
或者,只从本地存储库中删除文件,但从文件系统中删除
git rm –cached文件名
-
其次,提交更改到本地存储库。
git commit -m "unwanted files or some inline comments"
-
最后,将本地更改更新/推送到远程存储库。
git push
如果你没有在你的本地仓库中存档,而是在git仓库中,那么只需通过web界面在git仓库中打开文件,然后在界面的右上angularfind删除button。 点击这里,查看界面删除选项