删除已提交的commit

1
2
3
4
git reset --hard <commit_id>   
#回滚到指定commit
git push origin HEAD --force
#强制提交

删除标签

1
2
3
4
git tag -d <tag>;  
#删除标签
git push origin :<tag>
#提交标签

永久删除已提交的文件与提交记录

1
2
3
4
5
6
7
8
9
10
11
#找出最大的三个文件
git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -3

#查看名称
git rev-list --objects --all | grep <hash>

#移除引用
git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch <file or folder name>' --tag-name-filter cat -- --all

#提交
git push --force --all

说明

filter-branch 让git重写每一个分支
--force 遇到冲突也让git强制执行
--index-filter 重写时执行命令
--prune-empty 忽略空commit。
--tag-name-filter tag重命名方式