你 還是在 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。