Git 多账号推送远程仓库完整流程(含 SSH 多密钥配置)
一、基础 Git 推送流程(单账号)
# 1. 初始化本地仓库
git init
# 2. 添加所有文件到暂存区
git add --all
# 3. 提交到本地仓库
git commit -m "test"
# 4. 添加远程仓库(默认命名为 origin)
git remote add origin [email protected]:yourname/repo.git
# 5. 查看当前远程地址配置
git remote -v
# 6. 推送代码到远程仓库的 main 分支
git push -u origin main
注意:在第 6 步中,Git 会:
- 查找 origin 对应的远程地址(如 [email protected]:yourname/repo.git);
- 尝试通过 SSH 连接 [email protected];
- 使用默认的私钥(通常是 ~/.ssh/id_rsa 或 ~/.ssh/id_ed25519)来进行身份验证;
- 成功后将本地 main 分支推送到远程仓库。
二、理解 origin 和 git@… 的含义
概念 | 含义 |
---|---|
origin | Git 中远程仓库的本地别名,默认用于标识克隆来源 |
[email protected]:yourname/repo.git | GitHub 的 SSH 远程仓库地址 |
git | SSH 登录用户(GitHub 固定使用 git ) |
github.com | 远程主机名(可以通过 ~/.ssh/config 设置别名) |
三、支持多个 GitHub 账号的 SSH 配置方法
如果你有多个 GitHub 账号(如:个人账号 + 公司账号),建议为每个账号生成独立 SSH 密钥,并通过 ~/.ssh/config 配置 Host 别名。
1. 生成多个 SSH 密钥对
运行下面的命令,生成多个密钥对,并将各自的 .pub 文件内容添加到对应 GitHub 账号 → Settings → SSH and GPG keys
# 个人账号密钥
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_personal
# 公司账号密钥
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_work
2. 配置 SSH config 文件(~/.ssh/config)
在文件夹 ~/.ssh/ 中创建一个config文件(无后缀),并编辑如下: 其中 Host github-personal 是 SSH 的主机别名,后续远程地址就可以用这个别名代替 github.com
# 个人账号配置
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
# 公司账号配置
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
3. 设置 Git 仓库远程地址使用对应 Host
# 使用个人账号
git remote set-url origin git@github-personal:yourname/repo.git
# 使用公司账号
git remote set-url origin git@github-work:company/repo.git
4. 验证当前使用的身份
ssh -T git@github-personal
# 输出应为:Hi yourname! You've successfully authenticated...
ssh -T git@github-work
# 输出应为:Hi company! You've successfully authenticated...
5. 在相应的仓库执行push操作
在不同仓库中执行下面操作push代码。
git push -u origin main
此时这个仓库中origin对应的是git@github-×××:yourname/repo.git ,由于在config中配置了不同×××对应的ssh私钥,因此在不同的仓库执行push操作就会使用相应的ssh私钥认证。
总结
想要push代码到远程库
- git init 初始化仓库
- git add –all 添加暂存区
- git commit -m “test” 提交本地库
- git remote add origin [email protected]: ….. 增加远程库 origin ,他的地址为 git@…..
- git remote -v 查看当前远程库是什么
- git push -u origin main 将main分支提交到远程库origin中
在执行"git push -u origin main"时,Git 会首先解析 origin 远程地址中配置的主机名(例如 [email protected]:…),并尝试通过 SSH 使用默认密钥进行身份验证,完成与远程仓库的连接。
当一台机器上配置了多个 GitHub 账号,并为每个账号生成了对应的 SSH 密钥对时,可以通过编辑 ~/.ssh/config 文件,为 github.com 设置不同的主机别名,并为每个别名绑定特定的私钥路径,从而实现账号之间的隔离。
例如,将远程地址设置为 “git@custom-alias:username/repo.git”,然后通过:“git remote set-url origin git@custom-alias:username/repo.git"替换 origin 的 URL,Git 在执行 push 时会识别到该地址中的主机名为 custom-alias,从而查找 SSH 配置中与该别名对应的密钥,使用对应账号进行认证。这也可以在首次添加远程时直接设置为别名,避免后续修改: “git remote add origin git@custom-alias:username/repo.git”。
注意:
在jetbrains的工具中使用git push的时候,工具会弹窗让用户选择使用哪一个ssh密钥,如果不选择,默认会使用它的git agent管理ssh密钥,这会和.ssh中config文件中的配置冲突。
因此,在jetbrains中push代码时,如果出现这个弹窗,记得选择正确的ssh密钥。也可以使用其他支持 git 命令的工具push代码,这样就会按照config中的配置自动选择相应的ssh密钥。