如何从我的存储库中删除 "file1.txt"
?
git rm
是正确答案,但请记住,该文件仍将保留在历史记录中。如果你想删除一个文件,因为它包含敏感信息,你需要做一些更激烈的事情。 (更改历史记录,尤其是对于您已经推送的内容,是一种激烈的行为,应尽可能避免。)
使用 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
git rm file.txt
从存储库中删除文件,但也会从本地文件系统中删除它。
要从存储库中删除文件并不将其从本地文件系统中删除,请使用:
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]$
更新:这个答案获得了一些流量,所以我想我会提到我的 other Git answer 分享了一些很棒的资源:This page 有一张图片可以帮助我揭开 Git 的神秘面纱。 "Pro Git" book is online 对我帮助很大。
git commit -m "Just removing file1.txt"
之类的东西来提交它,然后,如果您有一个远程存储库,请使用 git push origin master
之类的东西来推送提交。
首先,如果您使用 git rm
,尤其是对于多个文件,请考虑任何通配符都将由 shell 解析,而不是由 git
命令解析。
git rm -- *.anExtension
git commit -m "remove multiple files"
但是,如果您的文件已经在 GitHub 上,you can (since July 2013) 直接从 Web GUI 中删除它!
只需查看存储库中的任何文件,单击顶部的垃圾桶图标,然后像任何其他基于 Web 的编辑一样提交删除。
然后在您的本地仓库中使用“git pull
”,这也会在本地删除文件。
这使得这个答案成为从 git repo 中删除文件的(迂回)方式?
(更不用说文件了)在 GitHub 上 is 在“git repo”中)
https://i.stack.imgur.com/259au.jpg
(提交将反映该文件的删除):
https://i.stack.imgur.com/fgXe9.png
就这样,它消失了。有关这些功能的帮助,请务必阅读我们关于创建、移动、重命名和删除文件的帮助文章。注意:由于它是一个版本控制系统,如果您以后需要恢复文件,Git 总是会为您提供支持。
最后一句意味着被删除的文件仍然是历史的一部分,你可以很容易地恢复它(但还不能通过 GitHub Web 界面):
请参阅“Restore a deleted file in a Git repo”。
这是对我有用的唯一选择。
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'
注意:将 *.sql 替换为您的文件名或文件类型。要非常小心,因为这将通过每个提交并撕掉这个文件类型。
编辑:注意-在此命令之后您将无法推送或拉取-您将看到拒绝“无关历史”您可以使用“git push --force -u origin master”进行推送或拉取
git push --force -u origin master
推送它
此外,如果它是要删除的文件夹以及后续的子文件夹或文件,请使用:
git rm -r foldername
Use git rm --cached -r <foldername>
更一般地说,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 help
令人困惑,但它对简单的事情有好处:)
rm
暂存文件以供删除 而不是 从索引中删除(尽管对于新手来说仍然毫无意义)。
如果您想从 repo 中删除文件,但将其保留在文件系统中(将不被跟踪):
bykov@gitserver:~/temp> git rm --cached file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo"
如果要从 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
从现在开始只会删除此分支上的文件,但它会保留在历史记录中,git 会记住它。
正如其他人在这里提到的那样,正确的方法是使用 git filter-branch
。它将重写分支历史记录中的每个提交以删除该文件。
但是,即使在这样做之后,git 仍然可以记住它,因为在 reflog、remote、tags 等中可以引用它。
如果您想一步完全消除它,我建议您使用git forget-blob
这很简单,只需执行 git forget-blob file1.txt
。
这将删除所有引用,执行 git filter-branch
,最后运行 git 垃圾收集器 git gc
以完全摆脱您的存储库中的这个文件。
git mv
重命名了文件,从提交的文件中清除了所有内容。
注意:如果您只想从 git 中删除文件,请使用以下命令:
git rm --cached file1.txt
如果您还想从硬盘中删除:
git rm file1.txt
如果要删除文件夹(该文件夹可能包含少量文件),则应使用递归命令删除,如下所示:
git rm -r foldername
如果要删除另一个文件夹中的文件夹
git rm -r parentFolder/childFolder
然后,您可以像往常一样commit
和push
。但是,如果您想恢复已删除的文件夹,您可以按照以下步骤操作:recover deleted files from git is possible.
来自文档: git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--]
Johannchopin 编辑的 Greg Hewgill 的答案对我有帮助,因为我并不关心从历史记录中完全删除文件。就我而言,它是一个目录,所以我所做的唯一更改是使用:
git rm -r --cached myDirectoryName
而不是“git rm --cached file1.txt”..后跟:
git commit -m "deleted myDirectoryName from git"
git push origin branch_name
另一种方法是,如果您想使用 rm 命令从本地文件夹中删除文件,然后将更改推送到远程服务器。
rm file1.txt
git commit -a -m "Deleting files"
git push origin master
git rm --cached file1.txt
当涉及到敏感数据时——最好不要说你删除了文件,而只是将它包含在最后一次已知的提交中:
0. 修改最后一次提交
git commit --amend -CHEAD
如果要从所有 git 历史记录中删除该文件,根据 documentation,您应该执行以下操作:
1. 将其从您的本地历史记录中删除
git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \ --prune-empty --tag-name-filter cat -- --all
# Replace PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA with the path to the file you want to remove, not just its filename
不要忘记将此文件包含在 .gitignore 中(如果它是您不想共享的文件(例如密码......):
echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"
3.如果需要从遥控器中移除
git push origin --force --all
4. 如果您还需要从标签发布中删除它:
git push origin --force --tags
在我的情况下,我尝试在几次提交后删除 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 文件名
单次递归地从目录中清除所有未跟踪的文件
git clean -fdx
git clean -fdx
<-- 请注意,因为它会删除所有未跟踪的内容。
To clean all the untracked files from a directory recursively
我的意思完全一样。
如果您有 GitHub for Windows 应用程序,您可以通过 5 个简单的步骤删除文件:
单击同步。
单击文件所在的目录,然后选择文件的最新版本。
单击工具并选择“在此处打开外壳”。
在 shell 中,输入:“rm {filename}”并回车。
提交更改并重新同步。
首先,从本地存储库中删除文件。 git rm -r File-Name 或者,仅从本地存储库但从文件系统中删除文件 git rm --cached File-Name 其次,将更改提交到本地存储库。 git commit -m "不需要的文件或一些内联注释" 最后,将本地更改更新/推送到远程存储库。 git 推送
转到您的项目目录并输入:
git filter-branch --tree-filter 'rm -f <deleted-file>' HEAD
之后 push --force 从所有提交中删除文件。
git push origin --force --all
对于 git rm
不够用且文件需要从历史记录中删除的情况:正如 git filter-branch
手册页现在本身建议使用 git-filter-repo,而我今天必须这样做,这里是一个使用该工具的示例.它使用示例 repo https://example/eguser/eg.git
将存储库克隆到新目录 git clone https://example/eguser/eg.git 保留除不需要的文件之外的所有内容。 git-filter-repo --path file1.txt --invert-paths 添加远程存储库来源: git remote add origin https://example/eguser/eg.git。 git-filter-repo 工具通过设计删除远程远程信息并建议一个新的远程 repo(见第 4 点)。这对于大型共享存储库是有意义的,但对于像本示例中那样删除单个新添加的文件可能会有点过分。当对本地的内容感到满意时,用它替换远程。 git push --force -u 起源大师。由于更改了历史记录,因此需要强制。
还要注意有用的 --dry-run
选项和链接手册中关于团队和项目动态的良好讨论,然后再加入和更改存储库历史记录。
我尝试了很多建议的选项,但似乎都没有工作(我不会列出各种问题)。我最终做的(对我来说)简单直观的工作是:
将整个本地存储库移至其他地方再次将存储库从主存储库克隆到本地驱动器将文件/文件夹从#1中的原始副本复制回#2中的新克隆确保问题大文件不存在或被排除在外在 .gitignore 文件中执行通常的 git add/git commit/git push
只需打开 github 存储库中的文件,您就可以看到 Raw|Blame 旁边的删除图标,并且不要忘记单击提交更改按钮。您可以看到您的文件已被删除。
我有 obj 和 bin 文件,它们不小心进入了我不想污染我的“已更改文件”列表的存储库
之后我注意到他们去了遥控器,我通过将其添加到 .gitignore
来忽略他们
/*/obj
/*/bin
问题是它们已经在远程中,并且当它们被更改时,它们会弹出为已更改并污染已更改的文件列表。
要停止看到它们,您需要从远程存储库中删除整个文件夹。
在命令提示符下:
CD 到 repo 文件夹(即 C:\repos\MyRepo) 我想删除 SSIS\obj。看来你只能在顶层删除,所以你现在需要 CD 进入 SSIS:(即 C:\repos\MyRepo\SSIS) 现在键入魔法咒语 git rm -r -f obj rm=remove -r = recursively remove -f = 表示强制,因为你的意思是 obj 是文件夹 现在运行 git commit -m "remove obj folder"
我收到一条令人震惊的消息,说 13 个文件已更改 315222 删除
然后因为我不想查找 CMD 行,所以我进入 Visual Sstudio 并进行了同步以将其应用到遥控器
如果您的文件是敏感文件(例如,您不小心添加和提交的设置或密钥),那么您可以将其从所有版本中删除。
要从所有版本中删除,请使用以下命令(警告:小心,因为如果没有副本,您将无法在 repo 中恢复已删除的文件):
使用 Git
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch file.ext' HEAD
使用 git-filter-repo(在这里获取,Git 推荐的新方式)
git filter-repo --path file.ext
如果您需要从确定的扩展名中删除文件(例如,编译的文件),您可以执行以下操作以一次将它们全部删除:
git remove -f *.pyc
如果你不是在本地仓库而是在 git repo 中归档,那么只需通过 web 界面在 git repo 中打开文件,然后在界面右上角找到删除按钮。 Click Here, To view interface Delete Option