目前我有
空的GitHub回购
SSH服务器恢复(main)
当地的回购
SSH服务器回购是最新的回购(生产站点),所以我从那里克隆了一个Git到本地。然后我尝试做一个git推送到GitHub。
一切都很好,但随后它说一些关于文件名。gz对GitHub太大。我不需要这个文件,所以我运行了几个Git命令从Git缓存中删除它,然后推回到SSH服务器。
我没有看到本地的大文件,但它仍然在SSH服务器上,即使git diff返回什么,git推送返回“一切都是最新的”-即使文件在本地回购中不可见,当我尝试推送到GitHub时,我仍然会得到错误
文件fpss.tar.gz是135.17 MB;这超过了GitHub的文件大小限制100mb
我遵循了“修复问题”列在GitHub帮助下的步骤,所以这不应该已经足够了吗?
当它不在本地或在git status/diff/push中列出时,文件如何仍然在以太中?
我也遇到了同样的问题,但没有一个答案适合我。我通过以下步骤来解决:
1. 找出哪个提交包含大文件
git log --all -- 'large_file`
底部提交是结果列表中最老的提交。
2. 找到最古老的那个。
git log
假设你有:
commit 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32
3. 变基
git rebase -i 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32
小贴士:
列表项
我只是选择删除提交包含大文件。
你可能会在rebase期间遇到冲突,修复它们并使用git rebase—继续继续,直到你完成它。
如果在rebase使用过程中出现任何错误,git rebase—abort来取消它。
你可以使用
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD
这将删除该文件历史记录中的所有内容。问题是该文件出现在历史记录中。
这个命令会改变提交的哈希值,这可能是一个真正的问题,特别是在共享存储库上。不应该在不了解后果的情况下进行。
编辑:git项目现在建议用户使用git filter-repo而不是git filter-branch。
使用git filter-repo
WARNING: git-filter-branch has a glut of gotchas generating mangled history
rewrites. Hit Ctrl-C before proceeding to abort, then use an
alternative filtering tool such as 'git filter-repo'
(https://github.com/newren/git-filter-repo/) instead. See the
filter-branch manual page for more details; to squelch this warning,
set FILTER_BRANCH_SQUELCH_WARNING=1.
安装
[brew|pip3|...] install git-filter-repo
使用
要删除路径前缀为example/path/ To /something的任何文件,可以运行
git filter-repo --path example/path/to/something--invert-paths
要删除任何没有路径前缀example/path/ To /something的文件,可以运行
git filter-repo --path example/path/to/something
如果你在寻求帮助之前就已经把你的回购搞得一团糟,我发现这里有一些非常有用的东西。第一类型:
git status
在此之后,您应该会看到类似于
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
重要的部分是“2次提交”!从这里,继续输入:
git reset HEAD~<HOWEVER MANY COMMITS YOU WERE BEHIND>
所以,对于上面的例子,你可以输入:
git reset HEAD~2
在你输入之后,你的“git状态”应该是:
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
从那里,您可以删除大文件(假设您还没有这样做),并且您应该能够重新提交所有内容而不会丢失您的工作。