How can I delete a file from git repo?
我在git repo中添加了一个名为
目前回购有
使用
1 2 | git rm file1.txt git commit -m"remove file1.txt" |
但是,如果只想从Git存储库中删除该文件,而不想从文件系统中删除该文件,请使用:
1 2 | git rm --cached file1.txt git commit -m"remove file1.txt" |
并推动对远程回购的更改
1 | git push origin branch_name |
要从repo中删除该文件而不是从本地文件系统中删除该文件,请使用:
下面的确切情况是,我使用git维护我的企业网站的版本控制,但"米奇"目录是一个tmp文件夹,用于与一个CAD开发人员共享私人内容。当他需要巨大的文件时,我创建了一个私有的、未链接的目录,并将文件ftpd放在那里,让他通过浏览器获取。忘记了我做的这些,我后来从网站的基本目录中执行了一个
下面的示例输出来自刚刚发生在我身上的事情,我无意中删除了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | [~/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"这本书是在线的,对我有很大帮助。
如果您的文件已经在Github上,那么您现在(2013年7月)可以直接从Web GUI中删除它!
Simply view any file in your repository, click the trash can icon at the top, and commit the removal just like any other web-based edit.
然后在您的本地repo上显示"
(提交将反映对该文件的删除):
And just like that, it’s gone.
For help with these features, be sure to read our help articles on creating, moving, renaming, and deleting files.
Note: Since it’s a version control system, Git always has your back if you need to recover the file later.
最后一句话意味着删除的文件仍然是历史记录的一部分,您可以很容易地还原它(但还不能通过Github Web界面还原):
请参见"在git repo中还原已删除的文件"。
这是我唯一的选择。
1 | git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql' |
注意:用文件名或文件类型替换*.sql。要非常小心,因为这将经历每一次提交,并撕掉这个文件类型。
编辑:注意-在这个命令之后,您将无法推或拉-您将看到"无关历史"的拒绝,您可以使用"git push--force-u origin master"推或拉
此外,如果它是要删除的文件夹,并且是后续的子文件夹或文件,请使用:
1 | git rm -r foldername |
一般来说,
1 2 3 4 5 6 7 | 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 |
如果要从repo中删除文件,但将其保留在文件系统中(将取消跟踪):
1 2 | bykov@gitserver:~/temp> git rm --cached file1.txt bykov@gitserver:~/temp> git commit -m"remove file1.txt from the repo" |
如果要从repo和文件系统中删除文件,则有两个选项:
如果文件在索引中没有阶段性更改:
1 2 | bykov@gitserver:~/temp> git rm file1.txt bykov@gitserver:~/temp> git commit -m"remove file1.txt" |
如果文件在索引中有阶段性更改:
1 2 | bykov@gitserver:~/temp> git rm -f file1.txt bykov@gitserver:~/temp> git commit -m"remove file1.txt" |
从现在起,
正确的方法是使用
但是,即使这样做了,Git仍然可以记住它,因为在reflog、remotes、tags等中可以引用它。
如果你想一步就把它完全抹掉,我建议你使用
Completely remove a file from a git repository with git forget-blob
这很简单,只需做一次
这将删除所有引用,执行
另一种方法是使用rm命令从本地文件夹中删除文件,然后将更改推送到远程服务器。
1 2 3 4 5 | rm file1.txt git commit -a -m"Deleting files" git push origin master |
删除特定文件
git rm filename
在一次快照中递归地清除目录中所有未跟踪的文件
git clean -fdx
如果您有用于Windows的Github应用程序,您可以通过5个简单步骤删除文件:
- 单击同步。
- 单击文件所在的目录并选择文件的最新版本。
- 单击"工具",然后选择"在此处打开外壳"。
- 在shell中,键入"rm filename",然后按Enter键。
- 提交更改并重新同步。
在我的例子中,我尝试在提交几次之后删除GitHub上的文件,但保存在计算机上
1 2 | git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD git push --force -u origin master |
后来这个文件被忽略了
注意:如果只想从git中删除文件,请使用以下命令:
1 | git rm --cached file1.txt |
如果还要从硬盘中删除:
1 | git rm file1.txt |
如果要删除文件夹(该文件夹可能包含少量文件),则应使用递归命令删除,如下所示:
1 | git rm -r foldername |
如果要删除其他文件夹中的文件夹
1 | git rm -r parentFolder/childFolder |
然后,您可以像往常一样使用
From doc:
1 git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…?OPTIONS
…?
1 Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files. If you want Git to expand file glob characters, youmay need to shell-escape them. A leading directory name (e.g. dir to
remove dir/file1 and dir/file2) can be given to remove all files in
the directory, and recursively all sub-directories, but this requires
the -r option to be explicitly given.
-f
--force
1 Override the up-to-date check.
-n
--dry-run
1 Don’t actually remove any file(s). Instead, just show if they exist in the index and would otherwise be removed by the command.
-r
1 Allow recursive removal when a leading directory name is given.
--
1 This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken forcommand-line options).
--cached
1 Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.--ignore-unmatch
1 Exit with a zero status even if no files matched.
-q
--quiet
1 git rm normally outputs one line (in the form of an rm command) for each file removed. This option suppresses that output.
阅读更多官方文件。
首先,从本地存储库中删除文件。
git rm -r File-Name
或者,只从本地存储库中删除文件,而从文件系统中删除文件
git rm --cached File-Name
其次,将更改提交到本地存储库。
1 | git commit -m"unwanted files or some inline comments" |
最后,将本地更改更新/推送到远程存储库中。
1 | git push |
我尝试了很多建议的选项,但没有一个有效(我不会列出各种问题)。我(对我来说)最终所做的是简单而直观的:
我有obj和bin文件,它们意外地进入repo,我不想污染我的"更改文件"列表。
当我注意到他们去了偏僻的地方,我就把这个加在了
1 2 | /*/obj /*/bin |
问题是它们已经在远程,当它们被更改时,它们会以更改的形式弹出并污染更改的文件列表。
要停止看到它们,需要从远程存储库中删除整个文件夹。
在命令提示中:
epos\MyRepo
epos\MyRepo\SSIS
- 删除=
- -R=递归删除
- -F=意味着力量,因为你真的是认真的。
- obj是文件夹
我收到一条警告消息说13个文件更改了315222个删除
然后因为我不想查找命令行,我进入Visual sstudio并进行了同步,将其应用到远程
使用
如果您不在本地回购中归档,而是在Git回购中归档,那么只需通过Web界面在Git回购中打开文件,然后在界面的右角找到删除按钮。单击此处查看界面删除选项