这页更适合排查问题。命令使用前先确认当前分支、远程地址和工作区状态。
一直提示没有权限
常见原因:
- 没有配置 SSH key。
- 当前 SSH key 没有添加到 GitHub、Gitee 或 GitLab。
- 远程地址写成了没有权限的仓库。
- 使用了 HTTPS 地址,但账号或 Token 失效。
排查命令:
1 | git remote -v |
如果项目应该使用 SSH,可以把远程地址改为 SSH 格式:
1 | git remote set-url origin git@github.com:owner/repo.git |
推送时提示 upstream 不存在
新分支第一次推送需要建立本地分支和远程分支的关联:
1 | git push -u origin feature-name |
后续同一个分支可以直接:
1 | git push |
合并冲突怎么办
先查看冲突文件:
1 | git status |
打开冲突文件后,Git 会用标记隔开双方改动:
1 | <<<<<<< HEAD |
处理方式:
- 理解两边改动分别解决什么问题。
- 编辑成最终需要保留的内容。
- 删除冲突标记。
- 重新暂存并提交。
1 | git add path/to/file |
提交错文件怎么办
如果还没有提交,可以取消暂存:
1 | git restore --staged path/to/file |
如果文件内容也不想保留,可以恢复工作区文件:
1 | git restore path/to/file |
如果已经提交,但还没有推送,可以重新整理最近一次提交:
1 | git reset --soft HEAD~1 |
如果已经推送到共享分支,建议新增一个修复提交,不要随意改公共历史。
本地分支落后远程怎么办
先拉取远程信息:
1 | git fetch origin |
查看差异:
1 | git log --oneline HEAD..origin/main |
确认后再合并或变基:
1 | git pull |
团队协作中,如果不确定该用 merge 还是 rebase,优先使用团队约定。
文件换行符总是变化
跨 Windows、macOS、Linux 协作时,换行符可能造成大量无意义差异。
可以在仓库中增加 .gitattributes:
1 | * text=auto |
也可以按项目类型细分:
1 | *.sh text eol=lf |
文件权限总是变化
如果 git status 反复出现文件权限变化,可以查看:忽略文件权限变化。
提交信息怎么写
提交信息应说明改动完成了什么,而不是描述执行了哪些编辑动作。常见格式是“类型 + 简短结果”:
1 | feat: add order export |
一次提交尽量只表达一个完整意图。修复冲突或误提交时,也应在提交信息中说明最终处理结果。