新版GitHub要求使用身份验证密钥替代密码时推送代码报错如何解决
报错原因
在你描述的GitHub身份验证规则升级场景下,该报错的核心原因是GitHub已于2021年8月14日全面停止了HTTPS协议下使用账户密码进行身份校验的支持,当你使用HTTPS格式的远程仓库地址执行推送操作时,仍然使用旧的密码验证逻辑就会被平台拒绝,最终触发推送失败的报错。
额外可能的诱因:
- 本地系统密钥链/凭证管理器中存储的GitHub旧密码凭证没有更新,Git调用旧凭证校验失败
- 远程仓库存在本地没有的最新提交,本地分支版本落后于远程分支,也会触发同格式的报错
你遇到的原始报错信息如下:
error: failed to push some refs to 'https://github.com/Kalim22/Small-projects.git';
报错界面截图:
解决方法
根据你的使用习惯可以选择以下任意一种方案:
方案1:改用SSH密钥验证(更推荐,无需频繁维护凭证)
- 本地生成SSH密钥对,将公钥内容上传到GitHub账户设置的「SSH and GPG keys」列表中
- 执行命令修改本地仓库的远程地址为SSH格式:
git remote set-url origin git@github.com:Kalim22/Small-projects.git - 重新执行推送操作即可正常完成验证
方案2:继续使用HTTPS协议,用个人访问令牌(PAT)替代密码
- 登录GitHub账户,依次进入「Settings - Developer settings - Personal access tokens」,生成新的令牌,勾选需要的
repo相关权限后保存令牌值 - 先删除本地系统凭证管理器中存储的GitHub旧密码凭证,重新执行推送操作
- 弹出验证提示时,用户名正常填写你的GitHub账户名,密码栏输入刚才生成的个人访问令牌即可完成验证
- 登录GitHub账户,依次进入「Settings - Developer settings - Personal access tokens」,生成新的令牌,勾选需要的
方案3:先排查版本落后问题(排除身份验证问题后使用)
如果确认身份验证配置没有问题,可先拉取远程的最新提交合并到本地后再推送,执行命令:git pull origin 你的对应分支名(通常为main/master)
合并完成且解决所有冲突后,重新执行git push即可
内容的提问来源于stack exchange,提问作者kalim
相关产品推荐
相关产品推荐

