github 怎么把大文件 commit 记录删除

262 天前
 hentailolicon

vscode debug 的时候忘记关的时候把 debug 文件 push 到 github 上了 然后删掉 push 后发现拉取的时候还是需要把这个历史大文件拉下来导致其他人 git pull 很慢 有什么好的办法处理掉吗

3304 次点击
所在节点    酷工作
27 条回复
yuankui
262 天前
了解下下面几个命令
git reset
git push --force

谨慎这种 push,除非迫不得已,不然你会被打
des
262 天前
试试 git filter-branch ,不过用了之后其他人都要删除仓库重新拉取
zanx817
262 天前
楼上说的是,提前备份好分支再操作
Leon406
262 天前
反正我感觉前面没有一个人 实际操作过

发下个人的笔记
https://gitee.com/LeonShih/notes/blob/master/other/gitlab%E5%88%A0%E9%99%A4%E5%A4%A7%E6%96%87%E4%BB%B6.md
chenliang0571
262 天前
git-filter-repo
des
262 天前
@Leon406 很不幸,我还真用过,起因是同事把测试用的 mp4 文件提交上去了……
Kisesy
262 天前
不知道 git 有没有提交时超过某个大小的文件就提示的选项,意外提交真的很烦人
Leon406
262 天前
@des #6 好吧,你除外
xiangyuecn
262 天前
论图形界面 和 乌漆嘛黑的命令行控制台,哪个更适合用于作为版本管理工具的 UI🐶

commit 不检查文件变更就算了,push 也不检查就直接塞进去了?
857681664
262 天前
印象中需要回溯所有以存在大文件 commit 作为父 commit 的 commit ,然后把大文件的 blob 从 commit tree 里删掉,最后强制 push 才能解决
jiefengwang
262 天前
jiefengwang
262 天前
@hentailolicon 可以试一下这个工具,清理之后,让所有人也重新拉一下项目就好了
xubeiyan
262 天前
首先你要知道在 gayhub 上仓库的和你本地仓库的没有什么区别,push 时覆盖提交(--force )即可
知道了这点之后那就落到了如何把这个文件从你的提交历史记录删掉了。这个是一个 cherry-pick 问题,使用 git 的命令行特别复杂,但对于一些 GUI 的就特别简单,例如 tortoisegit ,打开这个仓库的提交记录窗口,把包含了这个大文件到删除了这个大文件的提交都选上,选择压扁成一个提交。最后强制 push 到远程仓库即可。
顺便吐槽一下楼上的几位,git 就学成这样还 reset ,算了吧(
kinghly
262 天前
如果只是刚推的,就 reset 后重推;如果已经多了很多新 commit ,考虑 cherry pick 后把对应的分支干掉。
SimonOne
262 天前
@xubeiyan #13 是不是等于 git rebase 把删除大文件的提交 squash 到误加大文件的提交,再 git push --force ,然后让其他同事重新拉取。
fzls
262 天前
如果你已经推到远程,且你能确保让所有人都在你改动后重新拉取仓库,那你可以试试下面这个(用它重写 git 历史,然后强制推送,然后要求其他人重新拉取仓库)

https://github.com/newren/git-filter-repo/
yuankui
261 天前
@xubeiyan 你大姨妈来了吗? 我看了你的回复我想笑,我也懒得跟你解释 reset 为啥可以.你自己悟吧
ganbuliao
261 天前
liuqitoday
261 天前
git filter-repo
yalay
261 天前
@yuankui 我是这么操作的,别人传二进制上去了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/966874

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX