Git SSH 和 HTTPS 两种协议切换远程仓库地址

FreeGuideOnline 最新 2026-07-06

bash ls ~/.ssh/id_rsa.pub

或者

ls ~/.ssh/id_ed25519.pub


如果提示文件存在,说明已有密钥,可以跳过生成步骤。

#### 2. 生成新的 SSH 密钥(若没有)

推荐使用 Ed25519 算法(更高安全性),也可以使用 RSA:

```bash
ssh-keygen -t ed25519 -C "你的邮箱@example.com"

按提示一路回车即可(可设置密码保护,也可留空)。默认会在 ~/.ssh/ 目录下生成私钥 id_ed25519 和公钥 id_ed25519.pub

3. 将公钥添加到 Git 托管平台

复制公钥内容:

cat ~/.ssh/id_ed25519.pub

然后:

  • GitHub:Settings → SSH and GPG keys → New SSH key,粘贴并保存。
  • GitLab:Settings → SSH Keys,粘贴并保存。
  • Gitee:设置 → SSH 公钥,粘贴并保存。

4. 测试 SSH 连接

ssh -T git@github.com   # 替换为你的平台,如 git@gitlab.com

看到类似 “You've successfully authenticated” 的提示即表示配置成功。


查看当前远程仓库地址

在对远程地址做任何修改之前,先确认当前状态。在项目根目录下执行:

git remote -v

示例输出:

origin  https://github.com/user/repo.git (fetch)
origin  https://github.com/user/repo.git (push)

这里 origin 是远程仓库的默认别名,后面跟着地址。通常 fetch 和 push 指向同一个地址,但也可能不同。


从 HTTPS 切换到 SSH

假设当前远程地址是 HTTPS 格式,想要改为 SSH,有两种常用方法:

方法一:直接修改远程地址(推荐)

使用 git remote set-url 命令:

git remote set-url origin git@github.com:user/repo.git

origin 替换为你的远程别名,地址替换为对应的 SSH 地址。

验证修改:

git remote -v

现在输出应该显示 SSH 地址。

注意:你需要确切知道 SSH 地址的格式。一般规则是:

  • https:// 替换为 git@
  • 将域名后的第一个 / 替换为 :
  • 去掉 .git 后缀?不,保留 .git

例如 https://github.com/user/repo.gitgit@github.com:user/repo.git

方法二:删除并重新添加远程仓库

如果你更喜欢重新添加,也可以先删除旧的:

git remote remove origin
git remote add origin git@github.com:user/repo.git

然后验证。但需要注意,删除远程别名后,如果有其他分支跟踪信息,可能需要重新设置上游分支:

git push --set-upstream origin main

推荐使用方法一,因为它更简洁,不会影响分支跟踪。


从 SSH 切换到 HTTPS

操作完全对称,只需将地址换成 HTTPS 格式:

git remote set-url origin https://github.com/user/repo.git

同样可以用验证命令确认。

如果之前因为 SSH 密钥问题无法连接,切换到 HTTPS 后,推送时需要输入用户名和密码(Token)。为方便起见,可以配置 Git 凭证存储,避免每次输入:

git config --global credential.helper cache   # 临时缓存15分钟
# 或者
git config --global credential.helper store   # 永久保存(明文,注意安全)

配置多个远程仓库地址

有时一个本地仓库需要同时连接多个远程仓库,比如一个用于推送到 GitHub,另一个用于推送到私有 GitLab 或备份仓库。你可以为它们设置不同的别名:

git remote add github git@github.com:user/repo.git
git remote add gitlab git@gitlab.com:user/repo.git

查看所有远程:

git remote -v

现在你会看到两个别名 githubgitlab,可以分别推送:

git push github main
git push gitlab main

如果需要修改某个别名的地址,仍然使用 git remote set-url,并指定别名即可。


常见问题与故障排除

切换后提示“Permission denied (publickey)”

  • 确认 SSH 公钥已正确添加到托管平台。
  • 确认私钥路径和权限:~/.ssh/id_ed25519 权限应为 600
  • 确认 SSH agent 中已加载密钥:ssh-add -l,如果没有,执行 ssh-add ~/.ssh/id_ed25519
  • 使用 ssh -T git@github.com 测试连接,查看详细报错。

使用 HTTPS 推送时反复要求输入密码

  • 使用个人访问令牌(Token)代替密码。
  • 配置凭证管理器(如前所述 credential.helper)。
  • 如果使用 macOS,可以用 osxkeychain;Windows 可以用 Git Credential Manager。

切换后无法直接推送,提示分支无上游

这是因为你删除了远程又重新添加,导致本地分支与远程分支的关联丢失。执行以下命令重新建立关联:

git branch --set-upstream-to=origin/main main
# 或者推送时一并设置
git push -u origin main