Tech_Jia_Hui 2025-11-19 15:41 采纳率: 100%
浏览 6
已结题

git 提交代码时遇到的问题

#遇到问题的现象描述
在使用 Git 提交代码时,执行 git push origin main 命令报错,提示“remote: Permission denied (publickey)”,但我的 SSH 密钥已经配置过,且能正常通过 ssh -T git@github.com 测试连接。

#问题相关代码片段,运行结果,报错内容

git push origin main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 287 bytes | 287.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Permission denied (publickey).
fatal: unable to access 'https://github.com/user/repo.git/': The requested URL returned error: 403

#我的初步解答思路是

  1. 检查 SSH 密钥是否已添加到 SSH Agent:ssh-add -l
  2. 确认密钥是否正确绑定到 GitHub 账号(在 Settings → SSH and GPG keys 中查看)
  3. 尝试使用 HTTPS 方式重新推送,看是否与协议有关

#操作环境、软件版本等相关信息

  • 操作系统:macOS Ventura 13.6
  • Git 版本:git version 2.40.1
  • GitHub 账号:已登录,SSH 密钥已上传
  • 使用方式:终端命令行
  • 写回答

3条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-11-19 18:10
    关注

    让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。

    如果答案能帮助您,请采纳,非常感谢!
    .
    每日一句正能量,让它带给您好心情:即使走得很慢,只要不后退,就是在前进。
    .

    根据你描述的问题现象和初步排查情况,这是一个典型的 SSH 密钥认证问题。虽然 ssh -T git@github.com 测试连接成功,但实际推送时仍然出现权限拒绝,可能有以下几个原因:

    问题分析

    从错误信息可以看出,Git 实际上在使用 HTTPS 协议而非 SSH 协议进行连接:

    fatal: unable to access 'https://github.com/user/repo.git/'
    

    这表明你的仓库远程地址配置为 HTTPS 格式,而不是 SSH 格式。

    解决方案

    方案一:修改远程仓库地址为 SSH 格式

    1. 检查当前远程地址
    git remote -v
    
    1. 将 HTTPS 地址改为 SSH 地址
    git remote set-url origin git@github.com:user/repo.git
    
    1. 重新尝试推送
    git push origin main
    

    方案二:检查并确认 SSH 配置

    1. 验证 SSH 密钥是否加载
    ssh-add -l
    

    如果列表为空,需要添加密钥:

    ssh-add ~/.ssh/id_rsa  # 或其他密钥文件
    
    1. 检查 SSH 配置文件(如果存在):
    cat ~/.ssh/config
    

    确保 GitHub 相关配置正确:

    Host github.com
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_rsa
    

    方案三:使用 HTTPS 方式(备选)

    如果确实需要使用 HTTPS 方式:

    1. 配置 Git 凭据存储
    git config --global credential.helper store
    
    1. 或者使用个人访问令牌
    • 在 GitHub Settings → Developer settings → Personal access tokens 创建新令牌
    • 推送时使用令牌作为密码

    验证步骤

    完成上述修改后,按以下顺序验证:

    1. 测试 SSH 连接
    ssh -T git@github.com
    
    1. 验证远程地址
    git remote -v
    
    1. 执行推送
    git push origin main
    

    常见排查要点

    • 仓库权限:确认你有向该仓库推送代码的权限
    • 密钥匹配:确保本地 SSH 密钥与 GitHub 账户中配置的密钥一致
    • 协议一致性:确保远程地址协议与认证方式匹配

    建议优先采用方案一,将远程地址改为 SSH 格式,这通常能解决此类认证冲突问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月28日
  • 已采纳回答 11月20日
  • 创建了问题 11月19日