偶尔我会把一个DVD-rip放到一个网站项目中,然后不小心git commit -a -m ...,然后,zap,回购邮件被2.2演出臃肿.下次我做了一些编辑,删除了视频文件,并提交了所有内容,但是历史记录中的压缩文件仍然存储在存储库中.
我知道我可以从那些提交开始分支并将一个分支重新绑定到另一个分支.但是我应该怎么做才能将2个提交合并在一起,以便大文件没有在历史记录中显示并在垃圾收集过程中被清除?
我整天都被困在这个问题上,在这里寻找答案:( ...
上下文
我在一个项目上独自工作,直到现在我才使用github来保存我的工作,而不是在我的电脑上.不幸的是,我在本地存储库中添加了一个非常大的文件:300mb(超过Github的限制).
我做了什么
我将尝试记录我所做的事情:
我(愚蠢地)将所有内容添加到索引中:
git add *
Run Code Online (Sandbox Code Playgroud)我承诺改变:
git commit -m "Blablabla"
Run Code Online (Sandbox Code Playgroud)我试图推动原始大师
git push origin master
Run Code Online (Sandbox Code Playgroud)
花了一段时间,所以我只是按CTRL + C,并重复步骤2和3四次,直到我意识到文件太大而无法推送到github.
我犯了一个很糟糕的错误就是删除了我的大文件(我不记得我是做了一个git rm还是一个简单的rm)
我按照说明(https://help.github.com/articles/remove-sensitive-data)
当我尝试git filter分支时,我收到以下错误:"无法重写分支:您有未分阶段的更改."
提前致谢 !
我们的git repo在其历史中有一堆不再需要的大文件.我想使用Pro Git中解释的过滤器分支技术删除它们:
http://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery
然后我会用git push --force all它发送到我们的共享仓库,如下所述:
但.Pro Git说,自从我改变历史以来,我需要让每个人都坚持下去.我们只是谨慎使用rebase,通常只是作为合并的替代方式.我可以让每个人重新克隆,但这是最后的手段; 几个开发者都有当地的分支机构,他们希望保留这些变化.
那么:在我们的本地存储库中,每个人都需要做什么才能重新定义到新更改的共享仓库?每个跟踪分支我们必须做一次吗?我们的回购被称为原产地,而主要的分支是主要的,如果你想逐步提供(如果你愿意,我会喜欢它).
我在https://bitbucket.org/上有一个回购
几天前由于一个错误,大量的图像文件被推入了回购.然后通过另一个推送删除文件.在那个回购工作正常之后,但是今天当我试图从回购中撤出时:
$ git pull
Password for 'https://repo@bitbucket.org':
warning: no common commits
remote: Counting objects: 4635, done.
remote: Compressing objects: 100% (1710/1710), done.
fatal: Out of memory, malloc failed (tried to allocate 4266852665 bytes)
fatal: index-pack failed
Run Code Online (Sandbox Code Playgroud)
我试过了:
1)git config --global pack.windowMemory 1024m
2)
$ git count-objects -v
count: 9
size: 48
in-pack: 4504
packs: 1
size-pack: 106822
prune-packable: 0
garbage: 0
Run Code Online (Sandbox Code Playgroud)
那里没有运气,不知道我接下来应采取什么行动......
回购的大小应该在10-20m左右.接下来我应该采取什么行动?
更新1
我执行了这些命令:
$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch public/images/*' HEAD
Rewrite …Run Code Online (Sandbox Code Playgroud)