Eclipse中移除非最新提交文件及Git大文件Push报错求助
解决GitHub大文件推送失败+Eclipse中修改旧提交移除文件的问题
我来帮你搞定这两个Git相关的问题,都是开发中常会碰到的场景:
一、搞定"pre-receive hook declined"的大文件推送错误
GitHub默认规定单个文件不能超过100MB,你的提交里带了超标的文件,所以远程仓库的钩子直接把推送拦下来了。分两种情况处理:
情况1:这个大文件是误提交的,不需要留在仓库里
要是这个大文件是手滑提交的,得彻底把它从提交历史里清掉:
- 先打开本地仓库的终端,用
git log --oneline看看所有提交记录,找到包含那个大文件的提交ID;或者用git blame <大文件完整路径>直接定位到对应的提交。 - 启动交互式变基来修改历史提交:
比如问题提交的ID是git rebase -i <出问题提交的前一个提交ID>abc123,就用它的父提交ID,也可以用HEAD~3这种写法(表示回溯3个提交)。 - 弹出编辑器后,把目标提交那行的
pick改成edit,保存退出。 - 现在本地会回到那个提交的状态,删除大文件:
git rm --cached <大文件路径> # 想保留本地文件就加--cached,本地也删就去掉 git commit --amend --no-edit - 继续完成变基:
git rebase --continue - 最后强制推送到远程(因为改了历史提交,必须强制推,要是多人协作的话提前跟队友说一声):
git push -f
情况2:这个大文件是项目必需的,用Git LFS管理
如果大文件是项目离不开的,就用Git LFS来托管大文件:
- 先在本地装好Git LFS,然后在仓库里初始化:
git lfs install - 跟踪这个大文件(可以指定后缀或者具体文件名):
git lfs track "*.zip" # 比如跟踪所有zip文件,或者直接写文件名 - 提交生成的
.gitattributes文件:git add .gitattributes git commit -m "用Git LFS跟踪大文件" - 接着重复情况1里的变基步骤,把大文件用LFS处理后重新提交,最后强制推送到远程。
二、在Eclipse里从非最新提交移除文件
Eclipse的Git工具自带了可视化操作,不用纯命令行也能搞定:
- 右键你的项目 → Team → Show in History,打开Git历史视图。
- 在历史列表里找到要修改的那个旧提交,右键点击它 → 选择Rebase Interactive...
- 在弹出的窗口里,找到目标提交,把它的操作从
pick改成edit,然后点Finish。 - 这时候Eclipse会把项目回退到那个旧提交的状态,你可以看到当时的文件。
- 找到要移除的文件:如果想保留本地文件,右键文件 → Team → Remove from Index;如果本地也不想留,直接删除文件后右键 → Team → Commit。
- 右键项目 → Team → Commit...,在提交窗口里勾选修改,然后勾选Amend previous commit,确认提交信息后提交。
- 右键项目 → Team → Rebase → Continue,完成整个变基流程。
- 如果这个旧提交已经推送到远程过,右键项目 → Team → Push...,在推送窗口里勾选Force update,确认后推送(同样,多人协作记得提前沟通)。
内容的提问来源于stack exchange,提问作者user3246274
相关产品推荐
相关产品推荐

