1 fds 2016-12-01 11:09:01 +08:00 你怎么 rm 的?把 commit 从历史版本里删掉了么?没有的话用 git reset --hard 回到以前,然后 git push --force 强制覆盖。 |
![]() | 2 lrh3321 2016-12-01 11:10:20 +08:00 都已经被提交过了就无解了 除非你先 checkout 到 commit 之前 然后, 把最新分支的内容覆盖一次 接着,重新提交 再 -f 推送到服务器 |
3 song4 2016-12-01 11:13:03 +08:00 一旦文件添加进去,就一直在里面了,直接 rm 是没办法把这个文件从历史提交里面移除的。 你需要的是把文件从整个历史里面抹掉: git filter-branch --index-filter \ 'git rm --cached --ignore-unmatch path/to/your/file' \ --tag-name-filter cat -- --all |
![]() | 7 Citrus 2016-12-01 11:23:02 +08:00 ![]() 先说方法,你需要这个简单的小工具: https://rtyley.github.io/bfg-repo-cleaner/ 然后说原理: 因为 Git 会记录你 所有 的历史提交,所以为了回滚需要,只要是在 Git 中存在过一次的文件,就会被永久记录下来,不论当前是否存在。 |
![]() | 9 TangMonk 2016-12-01 11:31:18 +08:00 git rm --cached test |
![]() | 10 chousb 2016-12-01 11:34:41 +08:00 |
11 fan123199 2016-12-01 11:42:25 +08:00 @song4 git filter-branch --index-filter \ 'git rm --cached --ignore-unmatch path/to/your/file' \ --tag-name-filter cat -- --all 这个方法学习了,但是不知道对其他成员有没有影响(比如他 pull 或 push 时出错。)。 git 官方说, 修改 public repo 的已有 commit , 会有大影响。 |
12 song4 2016-12-01 11:44:45 +08:00 |
13 fan123199 2016-12-01 11:45:32 +08:00 @bonfy 这不是新手问题,如果你的 test 变动还在 HEAD ,那么很简单,按 1L 办,如果又加了新 commit ,那就难办了,所以要认真对待每个 commit ,特别是 push 的时候。 |
14 song4 2016-12-01 11:47:27 +08:00 另外,分享一篇文章, Github 官方帮助告诉你怎样从仓库里彻底移除敏感信息: https://help.github.com/articles/remove-sensitive-data/ |
15 fan123199 2016-12-01 11:51:41 +08:00 @song4 这个时候,是不是跟 filter 有关的 commit 的 hash 值都会变成新的。如果是的话,感觉是重做了整个 branch 的感觉。这个在公有 repo 还是太危险,行不通。 最好只在本地完成。 |
16 song4 2016-12-01 11:56:24 +08:00 |
![]() | 17 laiqs2011 2016-12-01 12:51:17 +08:00 git gc 试试? |
![]() | 21 fivesmallq 2016-12-01 18:07:40 +08:00 之前遇到过 ,可以参考下 http://nll.im/post/clean-up-git-repo.html |
![]() | 22 bonfy OP 谢谢各位,我最后还是 git reset , git push --force 重新提交解决的 核弹级选项: filter-branch 估计也是正解,但是看着就吓人,没勇气尝试。。。 |
![]() | 23 Sunnyyoung 2016-12-01 23:45:08 +08:00 ## 命令 `git filter-branch --tree-filter 'rm -rf test/' --tag-name-filter cat HEAD --all` ## 说明 `--all` : 所有分支 `--tree-filter`: 需要执行的命令 `--tag-name-filter cat` : Tag 也做修改 |
![]() | 24 DravenJohnson 2016-12-02 05:57:56 +08:00 需要 Clean 历史 Commit ,后晌几个说的都可以 |