无法从git commit删除文件


73

如何丢弃所有尚未推送的git commit,然后强制git在data /目录中不提交任何内容?

我试图从我的c9.io项目强制覆盖对存储在github上的项目的所有更改。我不小心git添加了一些mongodb数据文件。我试图将data /目录添加到.gitignore。我从github拉出以获取更新的.gitignore,但是当我尝试和git push时,data /中的这些顽固文件仍处于提交阶段。我还试图GIT中复位,GIT中底垫,GIT中清洁和其中我改变dmpfile.sql到pi /数据/节点login.1。

请帮我几个小时了,我真的很沮丧

Counting objects: 15, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (13/13), 150.22 KiB | 92 KiB/s, done.
Total 13 (delta 6), reused 0 (delta 0)
remote: warning: File pi/data/local.0 is 64.00 MB; this is larger than GitHub's recommended maximum file size of 50 MB
remote: warning: File pi/data/node-login.0 is 64.00 MB; this is larger than GitHub's recommended maximum file size of 50 MB
remote: error: GH001: Large files detected.
remote: error: Trace: e6ade98208c08b634ed28aefea36dfbb
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File pi/data/node-login.1 is 128.00 MB; this exceeds GitHub's file size limit of 100 MB
To git@github.com:bobbyg603/goddard.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@github.com:bobbyg603/goddard.git'

.gitignore:

lib-cov
*.seed
*.log
*.csv
*.dat
*.out
*.pid
*.gz

data/

pids
logs
results

npm-debug.log
node_modules

.project
.settings

谢谢,鲍比


1
显示您的.gitignore规则。
МалъСкрылевъ

1
您已链接到一个页面,该页面讨论了git filter-branch用于从历史记录中删除文件。这是正确的方法。您在此过程中遇到什么问题?
克里斯,克里斯

谢谢克里斯!我第一次尝试时肯定打错了字。我再次运行了该命令,它似乎已经起作用了:)
bobbyg603 2014年

Answers:


123

感谢克里斯,我能够通过运行以下命令解决此问题:

git filter-branch -f --index-filter'git rm --cached --ignore-unmatch pi / data / node-login.0'

git filter-branch -f --index-filter'git rm --cached --ignore-unmatch pi / data / node-login.1'

git filter-branch -f --index-filter'git rm --cached --ignore-unmatch pi / data / local.0'


1
请注意,它会重写所有历史记录。
Utopik

1
或使用BFG回购清洁剂。我已经做到了这两种方式,并且BFG速度更快,但是设置起来需要更多的注意,而git filter-branch是一个不错的选择。
bradw2k 2015年

1
我尝试了很多解决方案,但只有一种有效。非常感谢!
张伯伦

1
要扩展Sheraz的注释,请在Windows中确保使用双引号而不是单引号,并且如果您的路径和/或文件名称中有空格,请用单引号将其引起来。这样git filter-branch -f --index-filter "git rm --cached --ignore-unmatch 'path/with/spaces/in/file name.txt'"。请参阅stackoverflow.com/a/33741936/6169534。另外,请确保您在正确的目录中!
conor

1
伙计们,对远程文件有影响吗?
Camit1dk

69
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch FOLDERNAME" -- --all

将FOLDERNAME替换为您要从给定git存储库中删除的文件或文件夹。


关于肮脏的工作目录,我收到另一个错误。通过确保忽略我不断更新的jupyter检查点并提交gitignore来解决此问题,从而解决了该问题。
Reen

它在推送..时给了我错误:“错误:无法将一些引用推送到https // ...”,并给出了“提示:由于当前分支的尖端在后面,更新被拒绝了”。但是当我退出时,产生了很多冲突。
阿马尔·穆吉布

19

这对我有用:

git rm --cached name_of_a_giant_file
git rm --cached name_of_another_giant_file
git commit --amend -CHEAD
git push

来源:Github帮助:处理大文件


2
没事 应用此选项后,虽然减少了文件总数,但是在显示进程99%之后,它再次卡住了。有什么建议我想念的吗?
CoDe

2
@ biscuit314请更新命令:git commit --amend -CHEAD
Anish

3
git filter-branch --tree-filter 'rm -rf path/whaever' HEAD

这有点简单,它是一种将其从历史记录中删除并重写的方法。那就是结果

Rewrite 5ac3045254d33fc5bb2b9fb05dccbdbb986b1885 (61/62) (24 seconds passed, remaining 0 predicted)
Ref 'refs/heads/features_X' was rewritten

现在,我可以推动


非常感谢!这是适用于我的特定情况的唯一方法。
Sunit Gautam

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.