Git 常见问题

本文最后更新于:2024年9月8日 晚上

删除某些文件的全部提交记录

  1. 查询较大的文件。
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
  1. 获取hash对应的文件名。
1
2
git rev-list --objects --all | grep 81c33b34dbffb320aa797c9c08d50c7502bce925
34d5e541f538e86861f2cbcbd99c31172fcbbc9b tests/tests
  1. 删除该文件。
1
git filter-branch --force --index-filter   "git rm --cached --ignore-unmatch tests/tests"   --prune-empty --tag-name-filter cat -- --all
  1. 推送到github

根据文件所在的位置,二选一,你可以都尝试,只要管用即可。

1
2
git push origin --force --all
git push origin --force --tags
  1. 本地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. 提交未保存的修改并切换到新的分支。
1
git checkout --orphan latest_branch
  1. 缓存所有文件(除了.gitignore中声名排除的)
1
git add -A
  1. 提交跟踪过的文件。
1
git commit -am "first commit"
  1. 删除master分支。
1
git branch -D main
  1. 重命名当前分支为master
1
git branch -m main
  1. 提交到远程master分支。
1
git push -f origin main

无法访问 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"

`


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!