git常见错误和ssh验证推送

一、SSH 密钥验证推送:免密安全的主流推送方式

SSH 是 Git 最推荐的远程验证方案,相比 HTTPS 每次输入账号密码的方式,SSH 通过本地密钥对完成身份校验,一次配置永久免密,安全性和便捷性都更高,也是企业团队开发的标准方案。

1. 生成本地 SSH 密钥对

打开终端(Windows 系统推荐使用 Git Bash),执行以下命令生成密钥,优先使用安全性更高、体积更小的 ed25519 算法:

ssh-keygen -t ed25519 -C "你的平台注册邮箱"

执行后一路按回车即可(使用默认存储路径、无需设置密钥密码),最终会在系统目录生成一对密钥文件:

  • 私钥id_ed25519(绝对不能泄露、不能上传到任何公开位置,仅保存在本地)
  • 公钥id_ed25519.pub(用于添加到代码托管平台,可公开)

密钥默认存储路径:

  • Windows:C:\Users\你的用户名\.ssh\
  • Mac/Linux:~/.ssh/
2. 将公钥添加到远程平台
  1. 打开公钥文件 id_ed25519.pub,复制里面的全部内容
  2. 进入 GitHub / Gitee / GitLab 的「个人设置」,找到「SSH 公钥」(SSH Keys)选项
  3. 粘贴公钥内容,自定义一个标识标题(比如 “办公电脑”“家用笔记本”),保存即可
3. 验证 SSH 连接是否生效

终端执行对应平台的测试命令,以 GitHub 为例:

ssh -T git@github.com

首次连接会提示确认主机指纹,输入 yes 回车即可。 出现 Hi 用户名! You've successfully authenticated 字样,就代表 SSH 验证配置成功。

4. 配置仓库使用 SSH 推送

如果你的本地仓库之前绑定的是 HTTPS 地址,需要切换为 SSH 格式的远程地址:

  1. 先查看当前绑定的远程地址:
git remote -v

2.修改为 SSH 格式地址(地址从平台仓库的「Clone - SSH」处复制):

git remote set-url origin git@github.com:用户名/仓库名.git

3.后续正常推送代码即可,无需再重复输入账号密码:

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 系统默认换行符是 CRLF,Linux/Mac 是 LF,Git 自动转换时的提示,不影响代码功能 解决方案:执行全局配置关闭提示即可:

# Windows 系统
git config --global core.autocrlf true

# Mac/Linux 系统
git config --global core.autocrlf input
3. pathspec did not match any file(s)


报错信息:error: pathspec '文件名' did not match any file(s) known to git
常见原因:执行 git add 或切换分支时,文件名输入错误、文件不存在,或文件未被 Git 追踪
解决方案:核对文件名拼写,确认文件在当前目录下,或先执行 git status 查看可操作的文件列表。

谢谢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c23856

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值