我在git储存库中有一个很大的二进制文件,在几次提交中已更改了它。这些提交还包括对其他文件的更改。我只想在存储库中拥有二进制文件的最新版本,但想保留在这些提交中更改过的其他文件的历史记录。
所有有问题的提交都已被推送到github,并已被团队中的其他成员撤出。
我怎样才能做到这一点?
编辑:我不相信这是其他引用问题的重复。如以下评论中所述,我已经看过这个问题,但想要删除文件的每个版本,但最新版本除外。另一个问题的答案中未解决此标准。
不幸的是,我们不久前意外地检查了一个大的二进制文件,直到今天没有人注意到.现在我想删除该提交并保留剩余的历史记录.我知道改变推进历史的警告,但在这种情况下,我无法避免它.
我一直试图达到这个~1h但却未能得到它.我找到的最好的命令是
git rebase --interactive --preserve-merges $(EVIL_COMMIT)^
Run Code Online (Sandbox Code Playgroud)
并在编辑器中评论出第一次提交是邪恶的.
不幸的是,git rebase在合并时停止并提示手动解决合并冲突.邪恶的提交只添加了我们的软件为测试目的计算的一些示例文件.因此,它们不应该与刚刚丢失的示例文件发生任何冲突.
我在Google和SO搜索上花了很多时间.一些线程涵盖了类似的主题,但是使用的语法在今天的Git版本中不再可用,或者它对我不起作用(我之前仅描述了一种方法,因为它是最简单的方法).
几个月前我做了一些糟糕的提交后,我的bitbucket repo变得非常大(1.6 GB).我没有意识到情况有多严重(noob ..),因为一个同事试图克隆它并且失败了(太大了).
我仔细阅读了这篇文章为什么我的git存储库如此之大?并做了以下(如@Vi建议):
检测我的仓库历史记录中的胖文件
git rev-list --all --objects | sed -n $(git rev-list --objects --all | \
cut -f1 -d' ' | \
git cat-file --batch-check | \
grep blob | \
sort -n -k 3 | \
tail -n40 | \
while read hash type size; do
echo -n "-e s/$hash/$size/p ";
done) |
sort -n -k1
Run Code Online (Sandbox Code Playgroud)
假设其中一个胖文件是mybigfile.gz
从repo中删除mybigfile.gz
git filter-branch -f --index-filter \
'git rm --force --cached --ignore-unmatch mybigfile.gz' \
-- …Run Code Online (Sandbox Code Playgroud)不知何故,我有一个非常大的本地存储库,因为我不小心添加了超过 2 GB 的文件,并且不假思索地试图推动它。我中止了,删除了文件并重新提交,但是当我尝试git push origin master使用 Bitbucket 时,它失败了:
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
我的 .git 文件仍然很大,尽管我早就删除了不需要的文件。由于推送超过 2 GB,Bitbucket 说我需要将其设置http.postBuffer为更高的数字。我已经做过很多次了,但在尝试了大约 15 次之后,我想重新开始。
git status 给我这个:
On branch master
Your branch is ahead of 'origin/master' by 4 commits.
(use "git push" to publish your local commits)
Run Code Online (Sandbox Code Playgroud)
但是由于推送永远不起作用,我该如何解决?最坏的情况是我可以炸毁 repo 并重建它,但我想知道是否有办法重置推送,因为它一直失败。
我将一个 150MB 的视频添加到我的项目源文件中,并在不知不觉中提交了它。然后,我尝试git push提交到我的远程存储库,并注意到推送挂起了一段时间,然后最终失败,吐出以下内容:
Counting objects: 17, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (16/16), done.
Writing objects: 100% (17/17), 145.48 MiB | 138.00 KiB/s, done.
Total 17 (delta 13), reused 0 (delta 0)
remote: Resolving deltas: 100% (13/13), completed with 12 local objects.
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: Trace: 8b4191f1a1055e7dea4412f80b5125d2
remote: error: See http://git.io/iEPt8g for more information. …Run Code Online (Sandbox Code Playgroud) 我正在使用 Intellij IDE 开发 Java AWT 应用程序。在我 git 提交我的代码后,我推送到存储库:
me@mine-laptop myproject (master)$ git push origin master
Enumerating objects: 77, done.
Counting objects: 100% (77/77), done.
Delta compression using up to 4 threads
Compressing objects: 100% (58/58), done.
Writing objects: 100% (76/76), 114.51 MiB | 957.00 KiB/s, done.
Total 76 (delta 5), reused 1 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: …Run Code Online (Sandbox Code Playgroud) 我不小心把我的Python虚拟环境目录包含venv在我的所有git commit和push活动中.
我刚刚加入venv了我的.gitignore.但我的.git文件夹仍然很大(我假设因为之前的提交和跟踪venv).
我怎么能得到git完全忘记跟踪venv并.git再次将我的文件夹缩小到合理的大小,因为它使Heroku推动了一场噩梦.
我不小心在git中添加了一个大的20mb文件,我做了一个-ammend并删除了该文件.
在做一个git push origin master之前,我想确保删除该文件.
我尝试做一个git push origin master,它花了很长时间,传输达到7mb所以我认为大文件仍然在历史的某个地方.
如何判断大文件是否在git的repo历史记录中?
我是GIT的新手。我正在使用Git 1.7.9.5版本。
我正在托管在github上的项目。在某个时候从github推送和提取代码时,它可以正常工作,有时它会给我错误。
错误:RPC失败;结果= 22,HTTP代码= 408
致命:远端意外挂断
我没有什么错。如果有人可以建议我一些问题,那可能是问题所在。
所以我在个人服务器上使用git,我有一个旧的仓库,我需要更新.我删除了一堆旧文件并提交并推动了更改.我在我的服务器上使用Web UI(Gitlist).当我使用这个GUI下载repo作为zip文件时,它的大小正确,大约41MB.然而,当我克隆回购时,由于其中一个./git/objects/pack文件的大小约为900MB ,因此它更接近于演出.
当它真的应该小得多时,为什么回购如此之大?