一、提交与回退类问题

1. 提交错了分支

问题: 不小心在 main 分支提交了功能代码。
解决:


git checkout -b feature/temp # 新建分支保存提交 git checkout main git reset --hard HEAD~1 # 删除错误提交


2. 提交信息写错了

解决:


git commit --amend -m "正确的提交信息"


3. 想撤销上一次提交,但保留代码

解决:


git reset --soft HEAD^


4. 想完全撤销上一次提交(包括文件)

解决:


git reset --hard HEAD^


5. 提交了不该提交的大文件

解决:


git filter-repo --path largefile.zip --invert-paths


6. 想撤销多个提交

解决:


git reset --hard HEAD~3


7. 想撤销已推送的提交

解决:


git revert <commit-id> git push origin main


8. 想只修改上一次的文件但不更改提交信息

解决:


git add . git commit --amend --no-edit


二、分支与合并类问题

9. 删除了错误的分支

恢复:


git reflog git branch restore <hash>


10. 误删远程分支

恢复:


git fetch origin git checkout -b feature/login origin/feature/login


11. 合并冲突

处理:


git status # 手动修改冲突部分 git add . git commit -m "解决冲突"


12. 想取消一次错误的合并

解决:


git merge --abort


13. 忘记合并哪个分支

查看:


git branch --merged


14. 合并后发现错误,想回退

解决:


git reset --hard HEAD@{1}


15. Rebase 后历史混乱

解决:


git rebase --abort git pull --rebase origin main


16. 分支改名

解决:


git branch -m old-name new-name git push origin :old-name new-name git push origin -u new-name


17. 想让本地分支跟踪远程分支

解决:


git branch --set-upstream-to=origin/dev dev


三、远程仓库与推送类问题

18. 推送时提示 non-fast-forward

原因: 远程比本地新。
解决:


git pull --rebase origin main git push origin main


19. 推送被拒绝:权限不足

解决:

  • 检查远程 URL:git remote -v

  • 重新添加 SSH key。


20. 推送错了分支

解决:


git push origin --delete main git push origin feature/login


21. 想强制推送本地历史覆盖远程

警告: 会覆盖团队提交。
命令:


git push origin main --force


22. 提交被覆盖或丢失

恢复:


git reflog git checkout <commit-id>


23. 想将本地所有分支同步到远程


git push --all origin


24. 拉取更新但不自动合并


git fetch origin


四、文件与暂存区问题

25. 想取消已暂存的文件


git restore --staged <file>


26. 想放弃对文件的修改


git restore <file>


27. 想还原文件到某个版本


git checkout <commit> -- path/to/file


28. 文件误删


git checkout HEAD -- <file>


29. 不小心删除 .git 目录

恢复: 如果有 .git 备份可恢复;否则项目无法继续版本控制。


30. 想忽略某类文件

创建 .gitignore


__pycache__/ *.log node_modules/


五、Tag 与版本发布问题

31. 想删除远程标签


git push origin :refs/tags/v1.0


32. 想重命名标签


git tag new v1.0 git tag -d v1.0 git push origin :refs/tags/v1.0 git push origin new


33. 想查看标签对应提交


git show v1.0


六、冲突与协作问题

34. 冲突太多不想解决

解决: 保留当前版本


git merge --strategy-option ours

保留对方版本:


git merge --strategy-option theirs


35. 同步分支时遇到 “divergent branches”


git pull --rebase origin main


36. 提交后发现文件遗漏


git add . git commit --amend


37. 同时修改文件名和内容导致冲突

手动解决后执行:


git add oldname newname git commit


七、性能与仓库体积问题

38. 仓库太大


git gc --aggressive


39. 想删除历史中的大文件


git filter-repo --path file.zip --invert-paths


40. 想查看仓库体积最大文件


git rev-list --objects --all | sort -k2 | uniq -c | sort -nr | head


41. 想压缩对象包


git repack -ad


八、历史记录与追踪

42. 想查看文件的修改历史


git log --follow file.txt


43. 想查看谁修改了哪一行


git blame app.py


44. 想查找引入 Bug 的提交


git bisect start git bisect bad git bisect good v1.0


45. 想可视化历史


git log --graph --oneline --decorate --all


九、Rebase 与历史清理问题

46. rebase 过程中出错


git rebase --abort


47. rebase 完成后忘记 push


git push origin branch --force


48. 想合并多个提交


git rebase -i HEAD~3


49. 想修改老提交的信息


git rebase -i HEAD~5 # 将目标提交标记为 edit git commit --amend git rebase --continue


十、GitHub / CI 问题

50. Actions 构建失败

检查日志或手动触发:


gh workflow run deploy.yml


51. SSH 连接失败

解决:


ssh -T git@github.com

重新生成 key:


ssh-keygen -t rsa -C "you@example.com"


52. HTTPS 推送频繁要求输入密码

解决:


git config --global credential.helper store


53. 想切换 SSH 与 HTTPS


git remote set-url origin git@github.com:user/repo.git


十一、恢复与应急技巧

54. 找回被删除提交


git reflog git checkout <hash>


55. 恢复整个分支


git checkout -b restore <hash>


56. 查看当前 HEAD 指向


cat .git/HEAD


57. 游离 HEAD 恢复为分支


git checkout -b newbranch


58. 误删远程仓库文件

解决: 从其他开发者或备份恢复。


十二、安全与权限管理

59. 禁止强制推送主分支

GitHub 设置 → Branch Protection → 禁用 --force


60. 提交签名


git commit -S -m "安全签名提交"


61. 检查是否包含敏感信息


trufflehog git file://$(pwd)


十三、Hook 与自动化异常

62. pre-commit 无效

确保文件权限正确:


chmod +x .git/hooks/pre-commit


63. 想禁用 Hook


git commit --no-verify


十四、协作冲突场景(多人开发)

64. A 推送后 B 冲突

解决:


git pull --rebase origin main


65. A 删除文件但 B 修改了

解决:
手动恢复文件,然后重新合并。


66. 合并时大量文件无关变化

原因: 不同系统换行符
解决:


git config --global core.autocrlf false


十五、GitOps 与部署问题

67. 自动部署未更新

解决: 检查 YAML 中镜像标签是否随提交更新。


68. 回滚失败


argocd app rollback app-name --to-revision 3


69. CI/CD 触发条件错误

解决: 确认 on.push.branches 指定正确分支。


十六、底层修复与恢复

70. 发现 .git 文件损坏

修复:


git fsck --full git gc --prune=now


71. 丢失 HEAD 文件

手动恢复:


echo "ref: refs/heads/main" > .git/HEAD


72. 想查看所有对象


git rev-list --all


73. 想列出悬空对象


git fsck --lost-found


74. 想彻底删除历史提交


git filter-repo --force --invert-paths --path sensitive.txt


75. 想导出整个仓库为单文件


git bundle create project.bundle --all


十七、性能优化与大项目建议

76. 加快克隆速度


git clone --depth=1


77. 检查仓库状态


git count-objects -v


78. 合并大项目历史


git merge --squash


79. 批量删除旧分支


git branch | grep 'feature/' | xargs git branch -D


80. 清除缓存文件


git clean -fd


十八、日常效率技巧

81. 一行显示最后修改人


git log -1 --format='%an' -- <file>


82. 一行显示文件修改时间


git log -1 --format='%ai' -- <file>


83. 显示最近10次提交


git log -10 --oneline


84. 快速查看当前分支名


git rev-parse --abbrev-ref HEAD


85. 查找提交关键词


git log --grep "fix"


86. 临时保存当前工作


git stash


87. 恢复暂存内容


git stash pop


88. 删除所有 stash


git stash clear


89. 统计提交次数


git shortlog -s -n


90. 统计某人提交数


git shortlog -s -n --author="Alice"

参考案例:www.oicsi.cn


十九、常见错误信息与修复命令

错误信息 原因 解决命令
fatal: Not a git repository 当前目录不在 Git 项目中 cd 到正确路径
fatal: refusing to merge unrelated histories 不同历史分支合并 git merge --allow-unrelated-histories
fatal: pathspec did not match 文件路径错误 检查大小写与路径
error: Your local changes... 有未提交修改 git stash && git pull
detached HEAD HEAD 游离状态 git checkout -b newbranch

二十、团队合作与预防建议

  • 每次推送前执行 git pull --rebase

  • 绝不在 main 上直接提交;

  • 提交前运行本地测试;

  • 代码合并必须经过 PR 审查;

  • 每周清理无用分支;

  • 定期执行 git gc

  • 每个版本都打标签并记录 changelog。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐