我意外地在我的仓库中提交了一个不必要的大型子文件夹xxxxx,当我在推动时意识到这一点时,我在中途停止了推动.
然后我从repo中删除了一个不必要的文件夹xxxxx
git rm -r --cached xxxxx
Run Code Online (Sandbox Code Playgroud)
但是虽然ls-files没有显示xxxxx文件夹,但是当我执行时,git仍然试图推送它git push:
git push --verbose
(...)
Counting objects: 19, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (18/18), done.
POST git-receive-pack (chunked)
Writing objects: 100% (19/19), 132.93 MiB | 197.00 KiB/s, done.
Total 19 (delta 5), reused 0 (delta 0)
remote: warning: File xxxxx/a.csv is 72.22 MB; this is larger than GitHub Enterprise's recommended maximum file size of 50.00 MB
remote: error: GH001: Large files detected.
remote: error: File xxxxx/b is 112.37 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
Run Code Online (Sandbox Code Playgroud)
如何让git永久忘记"xxxxx"文件夹及其内容?
git push不推送文件,它推送提交.具体来说,它会推送你没有的提交(无论"他们"是谁 - 你正在推动的遥控器).他们抱怨至少有一个提交包含至少一个大文件.
您需要推送一些不同的提交,以便您推送的提交不包含大文件.
作为一般规则,执行此操作的方法是使每个"好"提交保持不变,将其复制到新分支,并为每个"坏"提交,提取好的部分,删除坏部分,并进行新的提交出于结果.例如,假设这是远程提交的提交图:
A <- B <- C <- D <-- origin/master
Run Code Online (Sandbox Code Playgroud)
假设您已添加了三个提交,但中间有一个问题:
A - B - C - D <-- origin/master
\
E - F - G <-- master
Run Code Online (Sandbox Code Playgroud)
当你运行git push你的git发送提交E,F和,并且G,并且远程抱怨因为F有文件它不应该.要解决此问题,您只需复制E到新分支 - 我们将调用副本E'- 然后复制 - 但是修复F生成F',然后复制G到make G'.让我们重命名旧("坏")master; 事实上,让我们完全删除名称,以便我们改为:
E' - F' - G' <-- master
/
A - B - C - D <-- origin/master
\
E - F - G [abandoned]
Run Code Online (Sandbox Code Playgroud)
执行此复制的git命令是git rebase.通常它只是直接复制; 你希望它复制E,但然后停止并让你修复F,然后复制G,并让它做到这一点的方法是使用-i或--interactive标志.
在一般情况下,你应该只复制而变化的承诺是只有你有,幸好这正是设定git push应该推,不管分支你推,(或任何远程名称,如果它不)会分隔遥控器(和其他人拥有)的提交.origin/branchorigin
交互式rebase可以做的远不止这些,所以请参阅Git Book获取说明.您还需要弄清楚哪些提交包含哪些大文件; 为此,git show并且git diff是有用的工具.
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |