【Git】对于github的本地ssh客户端的配置与分支的使用
本文详细介绍了Git的SSH密钥配置和分支管理操作。在SSH配置部分,涵盖了生成密钥对(ed25519/RSA算法)、添加公钥到GitHub、测试连接及故障处理的全流程,包括启动ssh-agent、修改配置文件等解决方案。分支管理部分则演示了从克隆仓库、创建/切换分支、提交修改到分支合并的完整工作流,重点讲解了合并冲突处理、分支删除等操作。文章还提供了Git常用配置查看命令和Windows下SSH
一、添加ssh公钥
1.使用git bash命令窗口
2.查看git用户以及邮箱配置
(1)查看当前仓库的本地配置(仓库级配置)
git config --local --list
(2)查看全局配置(用户级配置)
git config --global --list
这些配置对当前用户的所有 Git 仓库有效,存储在用户目录下(Windows 通常是 C:\Users\你的用户名\.gitconfig
,Linux/macOS 是 ~/.gitconfig
)
补充1:
查看所有配置(合并显示)
如果想一次性查看所有级别的配置(系统级 + 全局级 + 仓库级,优先级:仓库级 > 全局级 > 系统级),可以直接用:
git config --list
常用配置项说明
查看时可能会看到这些关键配置(如果设置过的话):
user.name
:你的 Git 用户名user.email
:你的 Git 邮箱(通常与 SSH 密钥的邮箱一致)remote.origin.url
:当前仓库的远程仓库地址(如 SSH 地址git@github.com:xxx/xxx.git
或 HTTPS 地址)core.editor
:Git 默认使用的编辑器
如果需要修改配置(例如设置用户名 / 邮箱),可以用 git config --global user.name "你的名字"
或 git config --global user.email "新邮箱"
这类命令。
3.生成 SSH 密钥对
输入以下命令(推荐使用更安全的 ed25519
算法,若系统不支持则用 rsa
):
方法 1:推荐的 ed25519 算法(更安全)
ssh-keygen -t ed25519 -C "你的邮箱地址"
方法 2:兼容旧系统的 RSA 算法
如果执行上面的命令提示不支持 ed25519
,改用 RSA 算法:
ssh-keygen -t rsa -b 4096 -C "你的邮箱地址"
注意:
-C
后面的邮箱建议与你的 Git 配置邮箱一致(可通过git config user.email
查看),方便识别密钥用途。
4.找到你的ssh的公钥所在的地方
C:\Users\name\.ssh\
.pub就是公钥
5.点击github网页的右上角用户头像进入设置
6.选择ssh选项,然后点击new ssh key,将公钥里的内容复制粘贴到ssh密钥框里
7.测试 SSH 连接
在 Git Bash 中输入对应平台的测试命令
# 测试 GitHub 连接
ssh -T git@github.com
# 测试 GitLab 连接
ssh -T git@gitlab.com
# 测试 Gitee 连接
ssh -T git@gitee.com
首次连接会提示确认主机指纹,输入 yes
后回车。如果看到类似 "Hi 你的用户名!You've successfully authenticated..." 的提示,说明配置成功。
完成后,你就可以继续使用 SSH 方式操作 Git 仓库了(如 git clone git@xxx
、git push
等)。
8.测试链接失败情况处理
出现
$ ssh-add /c/Users/name/.ssh/ssh_key_git/id_rsa
Could not open a connection to your authentication agent.
出现 "Could not open a connection to your authentication agent" 错误,是因为 SSH 代理(ssh-agent)没有启动。需要先启动代理再加载密钥,具体步骤如下:
解决方法:
-
启动 SSH 代理
在 Git Bash 中输入eval $(ssh-agent -s)
成功启动后会显示类似
Agent pid 1234
的信息(数字是进程 ID)。 -
重新加载私钥
再次执行加载密钥的命令(使用你的私钥路径):ssh-add /c/Users/zky/.ssh/ssh_key_git/id_rsa
-
验证是否加载成功
输入以下命令查看已加载的密钥:ssh-add -l
如果显示了你的密钥指纹,说明加载成功。
如果还是报超时错误,需要换一下端口以及其他配置。
在C:\Users\name\.ssh\的这个目录下才是ssh的客户端的配置地方,新建文件conf,如下:
添加一下内容:
# GitHub 配置
Host github.com
Hostname ssh.github.com # GitHub 的 SSH 服务器地址
Port 443 # 用 443 端口(部分网络屏蔽 22 端口时可用)
User git # GitHub 固定用户名,必须是 git
IdentityFile ~/.ssh/ssh_key_git/id_rsa
补充一下对于Windows下的ssh的客户端和服务器端的一些常用命令:
#查看关于ssh的所有服务的安装状态
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
#配置本机电脑的ssh服务器端:快速确认 “Windows 防火墙是否允许 OpenSSH 服务器通过”
Get-NetFirewallRule -Name *OpenSSH-Server* | Select Name, DisplayName, Enabled
#配置本机电脑的ssh服务器端:设置sshd ssh服务器端自启动
Set-Service -Name sshd -StartupType 'Automatic'
#配置本机电脑的ssh服务器端:在 Windows 系统防火墙中创建一条允许外部设备通过 SSH 协议(默认端口 22)远程连接本机的入站规则,确保 SSH 服务能正常接收外部连接请求
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
#配置本机电脑的ssh服务器端:启动本地sshd服务器端
Start-Service sshd
#配置本机电脑的ssh服务器端:停止本地sshd服务器端
Stop-Service -Name sshd
#配置本机电脑的ssh服务器端:获取本地sshd服务器端状态
Get-Service -Name sshd
#本机电脑的ssh客户端:连接另外一台安装了ssh服务器的电脑
ssh 用户名@服务器IP或主机名 -p 端口号
#-v是打印日志功能
ssh -v 用户名@服务器IP或主机名 -p 端口号
#传输文件夹(需加 -r 参数,递归传输)
# 本地文件夹 → 远程
scp -r 本地文件夹路径 用户名@服务器IP或主机名:远程保存路径
# 远程文件夹 → 本地
scp -r 用户名@服务器IP或主机名:远程文件夹路径 本地保存路径
#通过 ssh-copy-id 命令将本地公钥写入远程服务器的授权列表(避免每次输入密码)
ssh-copy-id 用户名@服务器IP或主机名
补充说明:
- 每次重启 Git Bash 后,都需要重新执行
eval $(ssh-agent -s)
启动代理,再用ssh-add
加载密钥(如果设置了密钥密码,此时需要输入密码)。 - 若想避免每次手动启动代理,可以配置 Git Bash 自动启动 ssh-agent(需要修改
.bashrc
或.profile
文件,适合有经验的用户)。
完成后,再次测试与 GitHub 的连接:
ssh -T git@github.com
在 Windows 系统中,要让 SSH 代理(ssh-agent
)开机自动启动并加载你的 SSH 密钥,可以通过以下两种方法实现:
方法 1:通过 Git Bash 配置自动启动(推荐)
这种方法会让 Git Bash 启动时自动运行 ssh-agent
并加载密钥,步骤如下:
-
打开 Git Bash 配置文件
在 Git Bash 中输入以下命令,编辑.bashrc
文件(如果没有会自动创建):vim ~/.bashrc
-
添加自动启动脚本
在文件末尾粘贴以下内容(替换为你的私钥路径):# 启动 SSH 代理 if [ -z "$SSH_AUTH_SOCK" ]; then # 检查是否已有 ssh-agent 进程 eval $(ssh-agent -s) # 加载你的 SSH 私钥(替换为实际路径) ssh-add /c/Users/name/.ssh/ssh_key_git/id_rsa fi
-
测试配置
关闭当前 Git Bash 窗口,重新打开一个,会自动启动代理并加载密钥。可以用以下命令验证:ssh-add -l # 查看已加载的密钥
-
检测到配置文件情况:系统中存在
~/.bashrc
(这是你之前配置自动启动 SSH 代理的文件),但缺少~/.bash_profile
、~/.bash_login
或~/.profile
这些登录级别的配置文件。 -
自动修复操作:Git Bash 自动为你创建了
~/.bash_profile
文件,并且在其中添加了加载~/.bashrc
的指令。这样一来,无论你是以登录方式还是非登录方式启动 Git Bash,~/.bashrc
中的配置(启动 SSH 代理、加载密钥等)都会生效。
后续操作建议:
-
无需额外处理这个提示,它只是告知你系统做了自动配置。
-
可以通过以下命令确认
~/.bash_profile
是否正确创建:cat ~/.bash_profile
正常情况下会看到类似这样的内容(用于加载
.bashrc
):# generated by Git for Windows test -f ~/.profile && . ~/.profile test -f ~/.bashrc && . ~/.bashrc
-
重新打开 Git Bash 测试,之前配置的 SSH 代理自动启动和密钥加载功能应该已经正常工作了。可以再次执行连接测试:
ssh -T git@github.com
如果看到 GitHub 的欢迎信息,说明所有配置都已生效,接下来就可以正常使用 git clone
、git push
等命令了。
补充2(有些时候会把ssh客户端和sshd服务器端的配置路径的配置文件搞混):
Windows 系统(安装 OpenSSH Server 后)
- 默认路径(适用于通过系统自带 “可选功能” 安装的 OpenSSH Server):
powershell
C:\ProgramData\ssh\sshd_config
- 注意:
ProgramData
是隐藏目录,需在文件资源管理器中开启 “显示隐藏文件” 才能直接访问。 - 早期版本或手动安装的 OpenSSH 可能位于:
C:\OpenSSH\sshd_config
(需根据实际安装路径调整)。
二、仓库分支
1.先clone一个仓库下来作为测试演示
$ git clone git@github.com:Molesidy/ubuntu_git_rep_test.git
Cloning into 'ubuntu_git_rep_test'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (3/3), done.
2.查看分支
#查看当前分支情况
git branch
3.新建分支
#新建一个分支branch_test1
git branch branch_test1
4.切换到分支上开发操作
#切换到新建的分支branch_test1
git checkout branch_test1
#如果希望在创建分支的同时切换到该分支,可以使用以下命令:
git checkout -b branchname
5.在 branch_test1分支上将仓库的测试文件进行写入数据改变,此时远程的mytest.txt文件是空的

6.在branch_test1分支上,进行提交文件mytest.txt
#将新建分支test推送到GitHub上
git push origin branch_test1 或者 git push origin branch_test1:branch_test1
#本质是「本地分支 → 远程仓库分支」的映射关系,格式可拆解为:
#git push <远程仓库名> <本地分支名>:<远程分支名>
#远程仓库名是你现在所在的仓库名字默认是origin
7.github切回main,查看mytest.txt
8.切回main,创建一个新的文件test2.txt,来回切换一次,看看区别
在main分支提交测试文件二到本地分支main后,再切回branch_test1分支看文件就看不到test2.txt了
然后我将测试文件2推送到远程的main了
9.尝试将branch_test1的测试文件1:mytest.txt合并到main,现在的情况是本地仓库的mytest.txt看起来是只有一个文件,但是逻辑上是两个,查看内容,即使我现在在main分支下将全部内容提交推送到远程,mytest.txt 里并没有 hello github
main
branch
10.分支的合并
当在不同的分支上进行了独立的开发工作后,我们可能需要将某个分支的修改合并到主线或其他分支上。Git提供了合并(merge)操作来实现这个功能。
切回main
#指定哪一个分支合并到你现在的分支下
git merge branch_test1
这是 Git 在执行分支合并操作时自动打开的提交信息编辑界面(默认使用 Vim 编辑器),目的是让你为这次合并填写 “提交说明”(记录合并的原因、内容等)。
界面内容解读
-
蓝色提示文字:
Merge branch 'branch_test1'
:说明当前要合并的是名为branch_test1
的分支。Please enter a commit message to explain why this merge is necessary...
:提示你 “输入提交信息,解释这次合并为何必要(尤其是当合并的是‘更新后的上游分支到主题分支’时)”。Lines starting with '#' will be ignored, and an empty message aborts the commit.
:以#
开头的行是 “注释行”,Git 会忽略它们;如果提交信息为空,这次合并会被取消。
-
下方大量带
#
的行:是 Git 自动生成的 “合并上下文”(比如分支信息、合并关联的提交等),仅用于参考,不会被当作提交信息的一部分。
如何操作这个界面(完成合并提交)
当前处于 Vim 的普通模式,需要先进入「插入模式」才能输入文字,步骤如下:
- 按键盘上的
i
键(进入 Vim 插入模式,此时左下角会显示-- INSERT --
); - 在编辑区域输入有意义的合并提交信息(比如
Merge branch_test1: 合并测试分支的功能更新
); - 按
Esc
键(回到 Vim 普通模式); - 输入
:wq
(冒号 +wq
,意思是 “保存(write)并退出(quit)”),然后按回车键。
这样就完成了合并的提交,Git 会记录这次合并及你填写的说明。
补充:如果想放弃合并?
如果临时不想合并了,在这个界面中:
- 按
Esc
键回到普通模式; - 输入
:q!
(冒号 +q!
,意思是 “强制(!)退出(quit)且不保存”),然后按回车键。
Git 会取消这次合并操作,回到合并前的状态。
合并完成,提交一下
11.到branch_test1分支下修改一下文件,演示解决冲突(这里冲突没出来就后面有空再补)
12.合并完成后有时候就删了
#branchname是你希望删除的分支的名称。注意,只有当该分支的修改已经合并到其他分支时,才能被安全地删除。
git branch -d branchname
#如果分支的修改尚未合并,可以使用强制删除的命令:
git branch -D branchname
13.现在又有许多其他命令,更多的命令就看看菜鸟教程吧,所以命令常用常新。
更多推荐
所有评论(0)