你 还是在 cmd 里执行,Select-String
是 PowerShell 的命令,cmd 不认识。
请务必按下面的步骤 切换到 PowerShell 再运行。
✅ 1. 打开 PowerShell(不要再用 cmd)
-
最简单:
在资源管理器里进入D:\linShiWenjian\my-react-electron-app\electron
然后 Shift + 右键 → 在此处打开 PowerShell 窗口
(出现的是蓝色窗口,标题栏写着 “Windows PowerShell”) -
或者:
Win + R
→ 输入powershell
→ 回车
然后手动cd
进去:cd "D:\linShiWenjian\my-react-electron-app\electron"
✅ 2. 在 PowerShell 里一次性粘贴并回车
git rev-list --objects --all |
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' |
Select-String '^blob' |
% { $_.Line.Split(' ')[2,3] -join "`t" } |
Sort-Object { [int]($_.Split("`t")[0]) } -Descending |
Select-Object -First 20
❗确认你没有在用 cmd
- cmd 窗口标题 是 “命令提示符”
- PowerShell 窗口标题 是 “Windows PowerShell”
只要标题是 PowerShell,就不会出现 'Select-String' 不是内部或外部命令
的报错。下面给出一条**“无需安装任何额外工具”**就能把这些大文件一次性从历史里抹掉的路线,最快 2 分钟解决。
(你已经知道 desktop/dist.zip
最大,我们就拿它举例,其他文件同理。)
✅ 方案:用 Git 自带的 filter-branch
-
在仓库根目录(
D:\linShiWenjian\my-react-electron-app\electron
)打开 PowerShell。 -
执行下面一条命令,把
desktop/dist.zip
从 所有分支、所有提交 里抹去:git filter-branch --force --index-filter ` "git rm --cached --ignore-unmatch desktop/dist.zip" ` -- --all
如果还想一次清多个文件,用空格并列即可:
git filter-branch --force --index-filter ` "git rm --cached --ignore-unmatch desktop/dist.zip src/assets/mtbg.gif desktop/electron/electron.exe" ` -- --all
-
等待完成(几百 MB 几十秒即可)。
-
强制推送到 Gitee:
git push --force-with-lease
⚠️ 完成后团队成员注意
- 其他人重新克隆仓库:
git clone https://gitee.com/xxx/xxx.git
- 若继续本地开发,需先:
git fetch origin git reset --hard origin/master # 或 main
✅ 一句话总结
目的 | 命令 |
---|---|
把 desktop/dist.zip 从所有历史中删除 | git filter-branch --force --index-filter "git rm --cached --ignore-unmatch desktop/dist.zip" -- --all |
强制推送到 Gitee | git push --force-with-lease |
按以上步骤执行,Gitee 就不会再报 100 MB 限制了。
这是因为你本地重写(filter-branch
)了历史,而远程仓库的历史没有同步,导致 “non-fast-forward” 拒绝。
✅ 解决方案:强制推送覆盖远程历史
git push --force-with-lease
--force-with-lease
比--force
更安全,会检查是否有人在同一分支上推送了新的内容。- 如果仍失败,用绝对强制的:
git push --force
⚠️ 团队提醒
- 只有你一个人在用仓库 → 直接
--force
没问题。 - 有协作者 → 让他们重新克隆或执行:
git fetch origin
git reset --hard origin/master
✅ 一句话总结
场景 | 命令 |
---|---|
历史重写后第一次推送 | git push --force-with-lease |
仍被拒 | git push --force |
执行完即可成功推送到 Gitee。