本文最后更新于:2024年9月8日 晚上
删除某些文件的全部提交记录
- 查询较大的文件。
1 2 3 4 5
| cd ROOT_OF_YOUR_REPO git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -3 edcfd306818542eecbbea3982ae83fc5a726cbe5 blob 6888412 2402254 3319670 34d5e541f538e86861f2cbcbd99c31172fcbbc9b blob 11080068 3615988 29584633 81c33b34dbffb320aa797c9c08d50c7502bce925 blob 13362444 4524205 13876485
|
- 获取hash对应的文件名。
1 2
| git rev-list --objects --all | grep 81c33b34dbffb320aa797c9c08d50c7502bce925 34d5e541f538e86861f2cbcbd99c31172fcbbc9b tests/tests
|
- 删除该文件。
1
| git filter-branch --force --index-filter "git rm --cached --ignore-unmatch tests/tests" --prune-empty --tag-name-filter cat -- --all
|
- 推送到github
根据文件所在的位置,二选一,你可以都尝试,只要管用即可。
1 2
| git push origin --force --all git push origin --force --tags
|
- 本地GC
1 2 3
| git for-each-ref --format="delete %(refname)" refs/original | git update-ref --stdin git reflog expire --expire=now --all git gc --prune=now
|
清除所有提交历史
- 提交未保存的修改并切换到新的分支。
1
| git checkout --orphan latest_branch
|
- 缓存所有文件(除了.gitignore中声名排除的)
- 提交跟踪过的文件。
1
| git commit -am "first commit"
|
- 删除master分支。
- 重命名当前分支为master
- 提交到远程master分支。
无法访问 git://github.com
解决方法:将git://
替换为https://
1
| git config --global url.https://github.com/.insteadOf git://github.com/
|
Git 身份验证失败
解决方法:清除密码缓存。
- 提交命令的时候我们用户名和密码填错了,身份认证失败后,就不会再弹用户名和密码了,可以直接使用下面的命令。
1
| git config --system --unset credential.helper
|
CRLF/LF自动转换
解决方法:修改配置文件。
1 2 3 4 5 6 7 8
| # 提交时转换为LF,检出时转换为CRLF git config --global core.autocrlf true
# 提交时转换为LF,检出时不转换 git config --global core.autocrlf input
# 提交检出均不转换 git config --global core.autocrlf false
|
.gitignore 忽略的文件还会被提交
问题原因:git缓存未清除:有时候即使正确添加了文件至.gitignore,git仍然会缓存这些文件,导致忽略规则不起作用。
解决方法:通过以下两个命令分别清除缓存和提交变更可以解决这个问题:
1 2 3
| git rm -r –cached . git add . git commit -m "Fixed gitignore issue"
|
`