我意外地将一个不需要的文件(filename.orig在解析合并时)提交到我的存储库几个提交之前,直到现在我才注意到它.我想从存储库历史记录中完全删除该文件.
是否可以重写更改历史记录,以便filename.orig从未首先添加到存储库中?
我想在GitHub上放置一个Git项目,但它包含某些带有敏感数据的文件(用户名和密码,比如/ config/deploy.rb for capistrano).
我知道我可以将这些文件名添加到.gitignore,但这不会删除他们在Git中的历史记录.
我也不想通过删除/.git目录重新开始.
有没有办法删除Git历史记录中特定文件的所有痕迹?
我有一个300 MB的git repo.我目前检出的文件重2 MB,git repo重298 MB.这基本上是一个仅限代码的回购,重量不应超过几MB.
最有可能的是,有人在某个时候偶然犯了一些重文件(视频,巨大的图像等),然后将它们删除......但不是从git中删除,所以我们有无用大文件的历史.如何在git历史记录中追踪大文件?有400多个提交,所以一个接一个将是耗时的.
注意:我的问题不是关于如何删除文件,而是如何在第一时间找到它.
我提交了id 56f06019(例如).在那个提交中,我不小心提交了大文件(50Mb).在另一个提交中,我添加相同的文件,但大小合适(小).现在我克隆的回购太重了:(如何从回购历史中删除那个大文件以减少我的回购的大小?
我尝试通过运行以下命令从远程仓库中删除文件:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
Run Code Online (Sandbox Code Playgroud)
但是Git抱怨说
无法创建新备份.以前的备份已存在于refs/original/
Force中使用-f
rm 覆盖备份:无法删除/.git-rewrite/backup-refs:权限被拒绝
rm:无法删除目录/.git-rewrite:目录不为空
这是在我已经删除了Windows上的.git-rewrite目录之后.
我该如何删除该文件?这是一个29Mb的文件,坐在我的仓库,所以我非常需要删除该文件.
我试图删除提交git rebase -i,但显然因为提交触及了很多不同的文件,Git抱怨冲突,我流产是安全的.
可能重复:
如何从Git中的提交历史中清除一个巨大的文件?
我做了一件蠢事.想象一下,我提交了一个100MB的文件.然后我看到这个并删除此文件并再次提交.这是删除文件的正常过程.
但现在副作用是我的历史很重,因为它保存了这个大文件(我相信这就是为什么它很重).我只使用本地git,所以我不在任何服务器同步.
如何最终删除此文件并节省磁盘空间?
我正在寻找减少git存储库大小的方法.搜索引导我到git gc --aggressive大多数时间.我还读到这不是首选方法.
为什么?如果我跑步,我应该注意什么gc --aggressive?
git repack -a -d --depth=250 --window=250推荐结束gc --aggressive.为什么?如何repack减少存储库的大小?此外,我不太清楚旗帜--depth和--window.
我应该怎么选择gc和repack?什么时候应该使用gc和repack?
我不小心添加了一个图像文件夹并提交.然后,我又做了一次提交.然后我git rm -f ./images再次使用并提交了这些文件.
现在,我在那个分支(master)中做了很多提交.在我的HEAD中,我没有该./static/images文件夹.
因此,我的回购规模增加了很多.如何完全删除这些斑点?我想从我的远程GitHub仓库中删除它.
(解决了,看到问题正文的底部)现在
寻找这个,我现在拥有的是:
几乎相同的方法,但它们都将对象留在包文件中......坚持.
我尝试了什么:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_name'
rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc
Run Code Online (Sandbox Code Playgroud)
包中还有文件,这就是我所知道的:
git verify-pack -v .git/objects/pack/pack-3f8c0...bb.idx | sort -k 3 -n | tail -3
Run Code Online (Sandbox Code Playgroud)
还有这个:
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch file_name" HEAD
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
Run Code Online (Sandbox Code Playgroud)
相同...
尝试过的git clone技巧,它删除了一些文件(约3000个)但最大的文件仍然存在...
我在存储库中有一些大的遗留文件,大约200M,我真的不希望它们在那里...而且我不想将存储库重置为0 :(
解决方案:这是摆脱文件的最短路径:
refs/remotes/origin/master一个远程存储库的行,删除它,否则git将不会删除这些文件git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort …我偶然在项目文件夹中添加了9000多张照片.并承诺他们.然后从磁盘中删除它们.承诺.
现在我尝试将更改推送到git服务器.但它需要太长时间并尝试发送12 Gb的数据.
我检查了磁盘上的文件大小,看到真正的.git文件夹需要12 Gb.
如何从那里删除照片?我试过了git rm,但失败了:
? git rm public/photos
fatal: pathspec 'public/photos' did not match any files
Run Code Online (Sandbox Code Playgroud)
因为我已经从磁盘上删除了它们,但它们仍然在.git文件夹中.
我试图添加public/photos到.gitignore:
public/photos/
*.zip
Run Code Online (Sandbox Code Playgroud)
但没有结果.当然,我可以hard reset head在我的项目中没有这么多垃圾照片.但从那时起我多次承诺并在代码中做了很多改变.