一、SSH 密钥验证推送免密安全的主流推送方式SSH 是 Git 最推荐的远程验证方案相比 HTTPS 每次输入账号密码的方式SSH 通过本地密钥对完成身份校验一次配置永久免密安全性和便捷性都更高也是企业团队开发的标准方案。1. 生成本地 SSH 密钥对打开终端Windows 系统推荐使用 Git Bash执行以下命令生成密钥优先使用安全性更高、体积更小的 ed25519 算法ssh-keygen -t ed25519 -C 你的平台注册邮箱执行后一路按回车即可使用默认存储路径、无需设置密钥密码最终会在系统目录生成一对密钥文件私钥id_ed25519绝对不能泄露、不能上传到任何公开位置仅保存在本地公钥id_ed25519.pub用于添加到代码托管平台可公开密钥默认存储路径WindowsC:\Users\你的用户名\.ssh\Mac/Linux~/.ssh/2. 将公钥添加到远程平台打开公钥文件id_ed25519.pub复制里面的全部内容进入 GitHub / Gitee / GitLab 的「个人设置」找到「SSH 公钥」SSH Keys选项粘贴公钥内容自定义一个标识标题比如 “办公电脑”“家用笔记本”保存即可3. 验证 SSH 连接是否生效终端执行对应平台的测试命令以 GitHub 为例ssh -T gitgithub.com首次连接会提示确认主机指纹输入yes回车即可。 出现Hi 用户名! Youve successfully authenticated字样就代表 SSH 验证配置成功。4. 配置仓库使用 SSH 推送如果你的本地仓库之前绑定的是 HTTPS 地址需要切换为 SSH 格式的远程地址先查看当前绑定的远程地址git remote -v2.修改为 SSH 格式地址地址从平台仓库的「Clone - SSH」处复制:git remote set-url origin gitgithub.com:用户名/仓库名.git3.后续正常推送代码即可无需再重复输入账号密码git push origin main二、Git 新手高频常见错误与解决方案一SSH 连接与权限类错误1. Permission denied (publickey)报错信息Permission denied (publickey). fatal: Could not read from remote repository.常见原因公钥未正确添加到远程平台或复制时遗漏了首尾内容本地私钥未被 SSH 代理识别或使用了错误的密钥文件Linux/Mac 下密钥文件权限过高系统出于安全规则拒绝加载解决方案重新核对平台上的公钥内容确保和本地.pub文件完全一致执行ssh-add ~/.ssh/id_ed25519手动将私钥加载到 SSH 代理Linux/Mac 执行chmod 600 ~/.ssh/id_ed25519修正私钥文件权限2. 22 端口连接拒绝 / 超时报错信息ssh: connect to host github.com port 22: Connection refused常见原因当前网络环境封禁了 SSH 默认的 22 端口公司内网、部分校园网、运营商网络常见解决方案配置 SSH 使用 443 端口连接在.ssh目录新建无后缀的config文件添加以下内容Host github.com Hostname ssh.github.com Port 443 User git保存后重新执行连接测试即可。3. Host key verification failed报错信息Host key verification failed.常见原因首次连接未确认主机指纹或远程平台主机指纹更新本地缓存与远程不匹配解决方案删除本地缓存的主机记录重新连接并输入yes确认即可ssh-keygen -R github.com二代码推送类错误1. failed to push some refs报错信息error: failed to push some refs to 仓库地址 hint: Updates were rejected because the tip of your current branch is behind常见原因远程仓库有本地不存在的提交比如远程手动新建了 README、其他协作者推送了代码直接推送会覆盖远程内容解决方案先拉取远程代码合并到本地再重新推送git pull --rebase origin main git push--rebase会以变基方式合并保持提交历史线性整洁是新手推送前的标准操作。2. fatal: remote origin already exists报错信息fatal: remote origin already exists.常见原因重复执行了git remote add origin命令本地已经绑定过名为 origin 的远程仓库解决方案先删除旧的远程地址再重新添加或者直接修改现有地址# 方式1删除后重新添加 git remote remove origin git remote add origin 新仓库地址 # 方式2直接修改现有远程地址 git remote set-url origin 新仓库地址3. Permission to xxx denied to xxx报错信息remote: Permission to 仓库地址 denied to 用户名.常见原因当前 SSH 密钥绑定的账号没有目标仓库的推送权限比如用个人账号推公司私有仓库、未被加入项目协作名单解决方案确认仓库已将当前账号添加为协作者或检查本地 SSH 密钥对应的账号是否正确。三基础操作类错误1. not a git repository报错信息fatal: not a git repository (or any of the parent directories): .git常见原因当前终端所在目录不是 Git 仓库或未执行git init完成初始化解决方案先通过cd命令进入项目根目录确认目录下有隐藏的.git文件夹若没有则执行git init初始化仓库。2. LF will be replaced by CRLF 警告报错信息warning: LF will be replaced by CRLF in xxx.常见原因Windows 系统默认换行符是 CRLFLinux/Mac 是 LFGit 自动转换时的提示不影响代码功能解决方案执行全局配置关闭提示即可# Windows 系统 git config --global core.autocrlf true # Mac/Linux 系统 git config --global core.autocrlf input3. pathspec did not match any file(s)报错信息error: pathspec 文件名 did not match any file(s) known to git常见原因执行 git add 或切换分支时文件名输入错误、文件不存在或文件未被 Git 追踪解决方案核对文件名拼写确认文件在当前目录下或先执行 git status 查看可操作的文件列表。谢谢
git常见错误和ssh验证推送
一、SSH 密钥验证推送免密安全的主流推送方式SSH 是 Git 最推荐的远程验证方案相比 HTTPS 每次输入账号密码的方式SSH 通过本地密钥对完成身份校验一次配置永久免密安全性和便捷性都更高也是企业团队开发的标准方案。1. 生成本地 SSH 密钥对打开终端Windows 系统推荐使用 Git Bash执行以下命令生成密钥优先使用安全性更高、体积更小的 ed25519 算法ssh-keygen -t ed25519 -C 你的平台注册邮箱执行后一路按回车即可使用默认存储路径、无需设置密钥密码最终会在系统目录生成一对密钥文件私钥id_ed25519绝对不能泄露、不能上传到任何公开位置仅保存在本地公钥id_ed25519.pub用于添加到代码托管平台可公开密钥默认存储路径WindowsC:\Users\你的用户名\.ssh\Mac/Linux~/.ssh/2. 将公钥添加到远程平台打开公钥文件id_ed25519.pub复制里面的全部内容进入 GitHub / Gitee / GitLab 的「个人设置」找到「SSH 公钥」SSH Keys选项粘贴公钥内容自定义一个标识标题比如 “办公电脑”“家用笔记本”保存即可3. 验证 SSH 连接是否生效终端执行对应平台的测试命令以 GitHub 为例ssh -T gitgithub.com首次连接会提示确认主机指纹输入yes回车即可。 出现Hi 用户名! Youve successfully authenticated字样就代表 SSH 验证配置成功。4. 配置仓库使用 SSH 推送如果你的本地仓库之前绑定的是 HTTPS 地址需要切换为 SSH 格式的远程地址先查看当前绑定的远程地址git remote -v2.修改为 SSH 格式地址地址从平台仓库的「Clone - SSH」处复制:git remote set-url origin gitgithub.com:用户名/仓库名.git3.后续正常推送代码即可无需再重复输入账号密码git push origin main二、Git 新手高频常见错误与解决方案一SSH 连接与权限类错误1. Permission denied (publickey)报错信息Permission denied (publickey). fatal: Could not read from remote repository.常见原因公钥未正确添加到远程平台或复制时遗漏了首尾内容本地私钥未被 SSH 代理识别或使用了错误的密钥文件Linux/Mac 下密钥文件权限过高系统出于安全规则拒绝加载解决方案重新核对平台上的公钥内容确保和本地.pub文件完全一致执行ssh-add ~/.ssh/id_ed25519手动将私钥加载到 SSH 代理Linux/Mac 执行chmod 600 ~/.ssh/id_ed25519修正私钥文件权限2. 22 端口连接拒绝 / 超时报错信息ssh: connect to host github.com port 22: Connection refused常见原因当前网络环境封禁了 SSH 默认的 22 端口公司内网、部分校园网、运营商网络常见解决方案配置 SSH 使用 443 端口连接在.ssh目录新建无后缀的config文件添加以下内容Host github.com Hostname ssh.github.com Port 443 User git保存后重新执行连接测试即可。3. Host key verification failed报错信息Host key verification failed.常见原因首次连接未确认主机指纹或远程平台主机指纹更新本地缓存与远程不匹配解决方案删除本地缓存的主机记录重新连接并输入yes确认即可ssh-keygen -R github.com二代码推送类错误1. failed to push some refs报错信息error: failed to push some refs to 仓库地址 hint: Updates were rejected because the tip of your current branch is behind常见原因远程仓库有本地不存在的提交比如远程手动新建了 README、其他协作者推送了代码直接推送会覆盖远程内容解决方案先拉取远程代码合并到本地再重新推送git pull --rebase origin main git push--rebase会以变基方式合并保持提交历史线性整洁是新手推送前的标准操作。2. fatal: remote origin already exists报错信息fatal: remote origin already exists.常见原因重复执行了git remote add origin命令本地已经绑定过名为 origin 的远程仓库解决方案先删除旧的远程地址再重新添加或者直接修改现有地址# 方式1删除后重新添加 git remote remove origin git remote add origin 新仓库地址 # 方式2直接修改现有远程地址 git remote set-url origin 新仓库地址3. Permission to xxx denied to xxx报错信息remote: Permission to 仓库地址 denied to 用户名.常见原因当前 SSH 密钥绑定的账号没有目标仓库的推送权限比如用个人账号推公司私有仓库、未被加入项目协作名单解决方案确认仓库已将当前账号添加为协作者或检查本地 SSH 密钥对应的账号是否正确。三基础操作类错误1. not a git repository报错信息fatal: not a git repository (or any of the parent directories): .git常见原因当前终端所在目录不是 Git 仓库或未执行git init完成初始化解决方案先通过cd命令进入项目根目录确认目录下有隐藏的.git文件夹若没有则执行git init初始化仓库。2. LF will be replaced by CRLF 警告报错信息warning: LF will be replaced by CRLF in xxx.常见原因Windows 系统默认换行符是 CRLFLinux/Mac 是 LFGit 自动转换时的提示不影响代码功能解决方案执行全局配置关闭提示即可# Windows 系统 git config --global core.autocrlf true # Mac/Linux 系统 git config --global core.autocrlf input3. pathspec did not match any file(s)报错信息error: pathspec 文件名 did not match any file(s) known to git常见原因执行 git add 或切换分支时文件名输入错误、文件不存在或文件未被 Git 追踪解决方案核对文件名拼写确认文件在当前目录下或先执行 git status 查看可操作的文件列表。谢谢