解决多 GitHub 账号导致的 git push 异常问题

0 阅读2分钟

问题描述

用多个 GitHub 账号时,经常会遇到这些问题:

  1. SSH 连接失败

    • 报错:Connection closed by 198.18.0.255 port 443
    • 原因:端口被防火墙阻止,或者多账号认证冲突
  2. 远程仓库访问错误

    • 报错:fatal: Could not read from remote repository
    • 原因:SSH 密钥和账号不匹配
  3. 分支跟踪问题

    • 报错:There is no tracking information for the current branch
    • 原因:本地分支没和远程分支建立联系
  4. 分支分歧问题

    • 报错:hint: You have divergent branches...
    • 原因:本地和远程的代码不一样

解决方案

核心思路就是用不同的 SSH 配置来区分不同的账号,每个账号用独立的密钥。

解决步骤

第一步:配置 SSH 多账号

  1. 先看看当前的 SSH 配置

    cat ~/.ssh/config
    
  2. 修改 SSH 配置文件

    nano ~/.ssh/config
    
  3. 添加多账号配置

    # 默认 GitHub 账号
    Host github.com
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_ed25519
        IdentitiesOnly yes
    
    # 第二个 GitHub 账号
    Host github-new
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_ed25519_new
        IdentitiesOnly yes
    

    注意:把 Port 443 去掉,用默认的 22 端口

第二步:修改项目的远程地址

  1. 查看当前的远程地址

    git remote -v
    
  2. 改成对应账号的地址

    # 给新账号的项目改地址
    git remote set-url origin git@github-new:githubNew/project.git
    

第三步:测试 SSH 连接

# 测试新账号连接
ssh -T github-new
# 成功的话会显示:Hi githubNew! You've successfully authenticated...

第四步:设置分支跟踪

# 建立本地和远程分支的联系
git branch --set-upstream-to=origin/main main

第五步:处理分支分歧

如果是新项目,直接强制推送:

# 强制推送本地代码到远程
git push --force-with-lease origin main

如果是已有项目,想保留远程内容:

# 设置默认合并模式
git config pull.rebase false
# 拉取并合并
git pull

总结

关键要点

  1. SSH 多账号配置:用不同的 Host 名和密钥,分开管理不同账号
  2. 端口选择:用默认的 22 端口,避免被防火墙拦截
  3. 远程地址设置:不同账号的项目用对应的 Host 名
  4. 分支管理:及时设置跟踪关系,处理分支分歧

最佳实践

  • 规范配置:每个账号创建独立的 SSH 密钥
  • 项目隔离:不同账号的项目用对应的配置
  • 定期检查:遇到问题先检查 SSH 连接状态
  • 及时同步:定期拉取推送,避免分支分歧

实用价值

这套方法不仅能解决多 GitHub 账号的推送问题,还能扩展到其他代码托管平台(比如 GitLab、Gitee 等)。通过标准化的配置,多账号切换和代码管理会变得非常顺畅。

按照上面的步骤操作,多 GitHub 账号的问题就能轻松解决,开发效率会提高不少!