git 误提交的文件怎么彻底删除?或是有什么最佳实践避免错误提交?

2023-08-08 21:48:10 +08:00
 smdbh

我认为的彻底删除是 objects 里对应的文件也被删除,包括本地和远程的。最主要的还是远程目录上文件如何处理 ,自建 git 有的还和数据库绑定,手动操作了服务器上的 git 目录和数据库的不一致,仓库网页就打不开了

1991 次点击
所在节点    git
11 条回复
shentar
2023-08-08 21:53:55 +08:00
reset hard
push force
应该是彻底删除。如果你的 commit 还没被同步到其他分支,应该这样就可以了。
liununu
2023-08-08 21:55:08 +08:00
1. Rebase -i 去 Drop commits ,再 Force Push 。但是其他人拉过更新,有可能再 Push 上去。
2. 在 .gitignore 里面添加文件或目录之类的
kongkx
2023-08-08 21:55:29 +08:00
LeegoYih
2023-08-08 21:57:55 +08:00
git reset head~
git push -f
Leon406
2023-08-08 22:05:51 +08:00
Vegetable
2023-08-08 22:14:12 +08:00
先 drop commit
之后 git gc ,其实本地无所谓,远程自建的 git 也都可以在设置定期 gc ,什么手动操作不存在的

比如 gitlab https://docs.gitlab.com/ee/administration/housekeeping.html
gitea 没找到文档,不过管理后台是有定时 gc 任务的。

github 之类的托管网站自己也会执行,你不用担心这些,只要保证提交记录都清理干净就行
Trim21
2023-08-08 22:28:40 +08:00
首先确保对应的 commit 已经都删掉了,不在哪个 branch/tag 的历史里

然后等服务器 gc 。
ysc3839
2023-08-08 22:32:04 +08:00
可以用 git filter-repo 修改历史提交
https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository
删除后 force push
但是曾经的 commit 不会被删除,需要 gc 才会删除,本地可以手动 gc ,但是远程仓库就比较麻烦了
geelaw
2023-08-08 22:33:45 +08:00
已经 push 到托管服务的 commit ,客户通常难以控制何时删除——在 GitHub 里,即使 force push 之后某个 commit 已经不可达,使用 commit hash 依然可以访问未被删除的 commit (见 #3 的链接)。

最好的补救措施就是让错误提交的数据无意义。避免错误提交的方式,除了先写好 .gitignore 之外就是不要 git add .,而是复核修改之后再添加(我一般用 GUI 工具)。
lee015
2023-08-09 01:58:33 +08:00
这个 bfg cleaner 工具可以彻底删除文件。原来有同事误提交并 push 了一个 dump 文件几个 G ,就是这个工具删除的,删完了看远端仓库大小也恢复正常了。
https://rtyley.github.io/bfg-repo-cleaner/
qwerthhusn
2023-08-09 08:44:23 +08:00
本地 reset 加上 force push

远端执行一次 pruge gc 就行了(你要有 git 服务端的管理员权限)

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

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

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

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

© 2021 V2EX