如何使用个人访问令牌PAT执行git push,遇到invalid refspec错误如何解决?
问题分析
- 命令格式错误:
git push正确语法为git push [远程仓库名] [本地分支:远程分支],你将仓库地址直接追加在命令末尾的操作会被Git识别为分支名(refspec)参数,因此触发invalid refspec、src refspec does not match any类报错。 - 权限配置冲突:你使用
sudo执行Git命令时,会切换到root用户身份运行,而你安装的GCM Core凭证默认存储在当前普通用户的凭证存储区,root用户读取不到对应PAT凭证,因此仍会弹出密码输入提示,输入原账号密码自然会触发GitHub停用密码认证的报错。 - 远程仓库操作错误:origin远程仓库已存在的情况下,不能使用
git remote add命令重复添加,需使用git remote set-url命令修改现有origin地址。 - curl返回API限流属于GitHub接口调用频次限制,和PAT本身的有效性无关,不影响Git仓库的推送认证。
解决步骤
方案1:将PAT内嵌到远程仓库地址(无需额外配置凭证管理)
- 执行命令修改origin远程地址,替换为带PAT的地址:
git remote set-url origin https://<替换为你的实际PAT>@github.com/scstraus/home-assistant-config.git
注意生成PAT时需勾选repo相关权限,否则没有仓库读写权限
2. 直接使用当前用户执行推送命令,无需加sudo,也无需额外输入凭证:
git push --force-with-lease origin master
方案2:使用GCM Core管理凭证(无需把PAT写入远程地址)
- 先清理本地存储的GitHub旧账号密码凭证:
- Windows系统:打开凭据管理器,删除所有GitHub相关的旧凭证记录
- Mac系统:打开钥匙串访问,搜索github删除所有相关旧凭证记录
- Linux系统:删除当前用户家目录下
.git-credentials文件中github相关的记录,确保GCM Core已配置为全局凭证助手:git config --global credential.helper /usr/local/bin/git-credential-manager-core
- 直接执行推送命令,GCM Core会弹出凭证输入提示,用户名输入你的GitHub账号,密码栏输入你生成的PAT,后续会自动保存凭证无需重复输入。
内容的提问来源于stack exchange,提问作者Sean Straus
相关产品推荐
相关产品推荐

