Git 实战指南:多源 SSH 密钥配置与现代分支工作流
初始化与基础配置
安装 Git 后,首要任务是配置用户身份。Git 的配置分为 system(系统级)、global(用户全局级)和 local(仓库本地级)三个层级,优先级依次递增,高优先级配置会覆盖低优先级。
查看当前生效的所有配置及其文件来源:
git config --list --show-origin
设置全局用户名和邮箱,这将作为代码提交时的默认身份标识:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
多平台 SSH 密钥配置
在同时使用 GitHub、GitLab 或 Gitee 等多个代码托管平台时,为每个平台配置独立的 SSH 密钥是最佳实践。相较于 HTTPS,SSH 协议免去了频繁输入凭证的繁琐过程。
1. 生成密钥对
推荐使用更安全的 ed25519 算法替代传统的 rsa。分别为不同平台生成独立的密钥文件:
# 为 GitHub 生成密钥
ssh-keygen -t ed25519 -C "github_user@example.com" -f ~/.ssh/id_ed25519_github
# 为 GitLab 生成密钥
ssh-keygen -t ed25519 -C "gitlab_user@example.com" -f ~/.ssh/id_ed25519_gitlab
2. 配置 SSH Config 文件
在 ~/.ssh/ 目录下创建或编辑 config 文件,通过 Host 别名映射不同的密钥文件,避免冲突:
# GitHub 配置
Host github
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
# GitLab 配置
Host gitlab
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519_gitlab
IdentitiesOnly yes
3. 添加公钥并测试连通性
将生成的 .pub 公钥内容复制到对应代码托管平台的 SSH Keys 设置面板中。随后在终端测试连接:
ssh -T git@github
首次连接会提示确认主机指纹,输入 yes 后,若看到成功认证的提示,即表示配置生效。此时 ~/.ssh/known_hosts 文件会自动记录该主机的指纹信息,用于防止中间人攻击。
SSH Agent 密钥管理
如果生成密钥时设置了密码短语(Passphrase),每次推送都会要求输入。可以通过 ssh-agent 在内存中缓存私钥:
# 启动 agent 并添加私钥
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_github
查看已加载的密钥列表或清空缓存:
# 查看列表
ssh-add -l
# 清空所有缓存
ssh-add -D
现代 Git 分支工作流实战
在实际开发中,合理的分支策略和现代化的 Git 命令(如 switch 和 restore)能大幅提升协作效率与安全性。
场景一:初始化并关联远程仓库
1. 在本地初始化项目并切换至开发分支:
git init
git switch -c develop
2. 关联远程仓库并拉取初始代码:
git remote add origin git@github:username/project.git
git fetch origin
git pull origin main
场景二:开发新特性 (Feature)
遵循单一职责原则,每个新功能或 Bug 修复都应基于主分支创建独立分支。
1. 创建并切换至特性分支:
git switch -c feature/payment-integration
2. 进行代码修改后,将变更加入暂存区并提交:
git add src/payment/
git commit -m "feat: integrate stripe payment gateway"
3. 推送特性分支至远程仓库:
git push -u origin feature/payment-integration
注:若需撤销工作区的错误修改,可使用 git restore <file> 替代传统的 git checkout -- <file>,语义更加明确。
场景三:分支合并与清理
当特性开发完成并经过代码审查后,需将其合并回主干分支。
1. 切换至目标分支并拉取最新代码:
git switch develop
git pull origin develop
2. 执行合并操作(推荐使用 --no-ff 保留合并历史节点):
git merge --no-ff feature/payment-integration
3. 推送合并后的主干分支,并删除已合并的本地和远程特性分支:
git push origin develop
git branch -d feature/payment-integration
git push origin --delete feature/payment-integration
常见同步问题排查
当远程仓库的分支被其他协作者删除,而本地执行 git branch -a 依然显示这些过期的远程跟踪分支时,需手动清理:
# 清理无效的远程跟踪分支
git remote prune origin
# 或者在 fetch 时自动开启清理
git fetch -p