git基本操作
摘要
.gitignore 规则不生效的解决办法
把某些目录或文件加入忽略规则发现并未生效,原因是.gitignore
只能忽略那些原来没有被追踪的文件,如果某
些文件已经被纳入了版本管理中,则修改.gitignore
是无效的。那么解决方法就是先把本地缓存删除(改变成未
被追踪状态),然后再提交:
1 | git rm -r --cached . |
修改提交历史
使用场景:一不小心把 node_modules 目录加入git仓库了,导致仓库很大
核弹级操作,注意备份
已知大文件
1 | git filter-branch -f --prune-empty --index-filter "git rm --cached --ignore-unmatch -fr node_modules" -- --all |
未知大文件
识别出最大的文件
1 | git verify-pack -v .git/objects/pack/pack-b39c5c51f10088875c96f1073840442c0d08f368.idx | sort -k 3 -n | tail -3 |
查询文件名
1 | git rev-list --objects --all | grep 9ab9f94ac7d6fea2bdf444e88104bd72670a70b5 |
将该文件从历史记录的所有 tree 中移除
1 | git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch app/build' |
回收内存
1 | rm -rf .git/refs/original/ |
强制推送
1 | git push origin --all --force |