我添加了一个名为"file1.txt"git repo 的文件.从那以后,我犯了,增加了几个目录,名称dir1和dir2,并承诺他们混帐回购协议.
现在当前的回购有"file1.txt",dir1和dir2.
我怎样才能删除"file1.txt",而不会影响其他人一样dir1和dir2?
Gre*_*ill 2971
用途git rm:
git rm file1.txt
git commit -m "remove file1.txt"
Run Code Online (Sandbox Code Playgroud)
但是,如果您只想从Git存储库中删除文件而不是从文件系统中删除它,请使用:
git rm --cached file1.txt
git commit -m "remove file1.txt"
Run Code Online (Sandbox Code Playgroud)
并将更改推送到远程仓库
git push origin branch_name
Run Code Online (Sandbox Code Playgroud)
Chr*_*s K 598
git rm file.txt从repo中删除文件,但也从本地文件系统中删除它.
要从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]$
Run Code Online (Sandbox Code Playgroud)
更新:这个答案正在获得一些流量,所以我想我会提到我的其他Git答案分享了几个很棒的资源:这个页面有一个图形,帮助我揭开Git神秘面纱.在"临Git的"一书是在网上,并帮助了我很多.
Von*_*onC 69
如果您的文件已经在GitHub上,您现在(2013年7月)可以直接从Web GUI中删除它!
只需查看存储库中的任何文件,单击顶部的垃圾桶图标,然后像任何其他基于Web的编辑一样提交删除.

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

就这样,它已经消失了.
有关这些功能的帮助,请务必阅读有关创建,移动,重命名和删除文件的帮助文章.
注意:由于它是一个版本控制系统,如果您以后需要恢复文件,Git总会退缩.
最后一句意味着删除的文件仍然是历史记录的一部分,您可以轻松地恢复它(但尚未通过GitHub Web界面):
请参阅" 在Git仓库中恢复已删除的文件 ".
Jas*_*son 58
这是唯一对我有用的选项.
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'
Run Code Online (Sandbox Code Playgroud)
注意:将*.sql替换为您的文件名或文件类型.要非常小心,因为这将通过每次提交并翻录此文件类型.
编辑:注意 - 在这个命令后你将无法推或拉 - 你会看到拒绝'无关历史'你可以使用'git push --force -u origin master'来推或拉
Raj*_*aja 33
此外,如果它是要删除的文件夹及其后续子文件夹或文件,请使用:
git rm -r foldername
Run Code Online (Sandbox Code Playgroud)
Jam*_*ley 24
更一般地说,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
Run Code Online (Sandbox Code Playgroud)
小智 17
由Johannchopin编辑的Greg Hewgill的答案帮助了我,因为我不关心从历史记录中完全删除该文件。就我而言,它是一个目录,因此我所做的唯一更改是使用:
git rm -r --cached myDirectoryName
Run Code Online (Sandbox Code Playgroud)
而不是“git rm --cached file1.txt”..后面是:
git commit -m "deleted myDirectoryName from git"
git push origin branch_name
Run Code Online (Sandbox Code Playgroud)
Ale*_*kov 15
如果要从repo中删除文件,但将其保留在文件系统中(将不会跟踪):
bykov@gitserver:~/temp> git rm --cached file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo"
Run Code Online (Sandbox Code Playgroud)
如果要从repo和文件系统中删除文件,则有两个选项:
如果文件没有在索引中暂存更改:
bykov@gitserver:~/temp> git rm file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt"
Run Code Online (Sandbox Code Playgroud)如果文件在索引中进行了更改:
bykov@gitserver:~/temp> git rm -f file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt"
Run Code Online (Sandbox Code Playgroud)nac*_*ker 12
git rm 只会从现在开始删除此分支上的文件,但它仍保留在历史记录中,git会记住它.
git filter-branch正如其他人在这里提到的那样,正确的做法是.它将重写分支历史记录中的每个提交以删除该文件.
但是,即使这样做,git也能记住它,因为在reflog,remotes,tags等中可以引用它.
如果你想一步完全消除它,我建议你使用 git forget-blob
这很简单,就是这样git forget-blob file1.txt.
这将删除每个引用,执行git filter-branch,最后运行git垃圾收集器git gc以完全删除repo中的此文件.
Tom*_*ran 12
根据文档。
\n git rm --cached file1.txt
当涉及到敏感数据\xe2\x80\x94时,最好不要说您删除了该文件,而只是将其包含在最后一次已知的提交中:
\n0.修改最后一次提交
\ngit commit --amend -CHEAD\nRun Code Online (Sandbox Code Playgroud)\n如果你想从所有 git 历史记录中删除该文件,根据文档你应该执行以下操作:
\n1. 将其从本地历史记录中删除
\ngit filter-branch --force --index-filter \\ "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \\ --prune-empty --tag-name-filter cat -- --all\n# Replace PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA with the path to the file you want to remove, not just its filename\nRun Code Online (Sandbox Code Playgroud)\necho "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore\ngit add .gitignore\ngit commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"\nRun Code Online (Sandbox Code Playgroud)\n3.如果需要从远程删除
\ngit push origin --force --all\nRun Code Online (Sandbox Code Playgroud)\n4. 如果您还需要将其从标签版本中删除:
\ngit push origin --force --tags\nRun Code Online (Sandbox Code Playgroud)\n
Suh*_*aib 10
另一种方法是,如果要使用rm命令从本地文件夹中删除该文件,然后将更改推送到远程服务器.
rm file1.txt
git commit -a -m "Deleting files"
git push origin master
Run Code Online (Sandbox Code Playgroud)
注意:如果您只想从git中删除文件,请使用以下命令:
git rm --cached file1.txt
Run Code Online (Sandbox Code Playgroud)
如果您也要从硬盘删除:
git rm file1.txt
Run Code Online (Sandbox Code Playgroud)
如果要删除文件夹(该文件夹可能包含几个文件),则应使用递归命令删除,如下所示:
git rm -r foldername
Run Code Online (Sandbox Code Playgroud)
如果要删除另一个文件夹内的文件夹
git rm -r parentFolder/childFolder
Run Code Online (Sandbox Code Playgroud)
然后,您可以commit和push往常一样。但是,如果要恢复已删除的文件夹,可以遵循以下步骤:可以从git恢复已删除的文件。
从文档:
Run Code Online (Sandbox Code Playgroud)git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…?选项
<file>…?Run Code Online (Sandbox Code Playgroud)Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files. If you want Git to expand file glob characters, you可能需要对它们进行脱壳。可以指定一个前导目录名称(例如,用于删除dir / file1的dir和dir / file2)来删除目录中的所有文件,以及递归地删除所有子目录,但这需要显式地指定-r选项。
-f--forceRun Code Online (Sandbox Code Playgroud)Override the up-to-date check.
-n--dry-runRun Code Online (Sandbox Code Playgroud)Don’t actually remove any file(s). Instead, just show if they exist in the index and would otherwise be removed by the command.
-rRun Code Online (Sandbox Code Playgroud)Allow recursive removal when a leading directory name is given.
--Run Code Online (Sandbox Code Playgroud)This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken for命令行选项)。
--cachedRun Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)Exit with a zero status even if no files matched.
-q--quietRun Code Online (Sandbox Code Playgroud)git rm normally outputs one line (in the form of an rm command) for each file removed. This option suppresses that output.
/sf/answers/143323421/ /sf/answers/1376667421/ 非常相似,都尝试了。没有什么。Git 不断跟踪该文件。(我使用 vscode,因此文件立即被标记为 U(未跟踪)或 A(已添加))
对整个类别执行此操作/sf/answers/3740180391/可以解决问题。
这样做可以从 git 中删除文件并使 git 忘记它:
**manually add the file name to .gitignore**
git rm --cached settings.py
git commit -m "remove settings.py"
git push origin master
git rm -r --cached .
git add .
git commit -m "Untrack files in .gitignore"
Run Code Online (Sandbox Code Playgroud)
ps:每次失败时,我都会尝试删除包含令牌等敏感信息的文件(.env 和 settings.py 文件)。但它可以很好地处理随机文件 oO
如果你有GitHub for Windows应用程序,你可以通过5个简单的步骤删除文件:
小智 5
在我的情况下,我尝试在几次提交后删除github上的文件,但保存在计算机上
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD
git push --force -u origin master
Run Code Online (Sandbox Code Playgroud)
后来这个文件被忽略了
| 归档时间: |
|
| 查看次数: |
2154128 次 |
| 最近记录: |