Git 的使用:创建 SSH key、多账号共存、提交代码及进阶使用
创建 SSH key
创建密钥
在 Windows 下,使用 Git bash,创建秘钥。
1 |
|
在这一步可以使用-C 'comment'
对秘钥进行注释。一些教程中要求在-C
后写邮箱,其实写什么都可以,不写也行,注释而已。
1 |
|
默认的密钥为 2048 位,可以使用-b
指定密钥位数。
1 |
|
之后会确认密钥文件的存放位置和文件名,如下。
1 |
|
回车即使用括号内的默认位置和名称,如果有多个密钥文件,注意修改文件名。如果不更改存放位置,只修改文件名,直接输入想要的文件名即可。密钥的私钥文件无后缀,公钥文件无需命名,与私钥一致,以.pub
为后缀。
之后会要求设置密码,回车则密码留空。
看到The key's randomart image is:
和创建密钥时的随机图像,即为创建成功。
添加密钥
添加私钥至 ssh-agent,Windows 下私钥的路径为C:\Users\UserName\.ssh\id_rsa
。当然在 Git Bash 里要加上引号,或这么写/c/Users/UserName/.ssh/id_rsa
,或者直接~/.ssh/id_rsa
。
1 |
|
如果上述命令无法执行,则
1 |
|
然后在 Github 或 Gitlab 的网页端添加公钥(公钥文件为C:\Users\UserName\.ssh\id_rsa.pub
)。
顺带一提,如果在创建时添加了注释,则公钥会以“空格+注释内容”结尾。
多个 Git 账号共存
创建多个 ssh-key
如果需要同时使用 Github 和 Gitlab,并同时使用ssh连接,则需创建两个密钥,如
1 |
|
重复上一节的内容,添加私钥至 ssh-agent,分别添加公钥至 Github 和 Gitlab。
为不同网站配置 ssh-key
进入密钥所在的.ssh
文件夹,创建配置文件。
1 |
|
在config
文件中写入如下内容,注意将 Github 部分的User UserName
修改为实际用户名。
1 |
|
测试 ssh-key 的配置情况
使用ssh -T
命令测试密钥配置情况。
1 |
|
如果是使用该密钥,会询问是否与远程服务器建立连接,输入yes
确认即可。之后会在~/.ssh
文件夹下生成known_hosts
文件,用以记录相应信息。
对于 Github,测试成功的信息为
1 |
|
对于 Gitlab,测试成功的信息为
1 |
|
至此,密钥的创建与配置工作完成。
设置 Git 账户信息
一般将常用的 Git 账户设置为全局(global)账户,为需要使用其他账户的仓库设置局域(local)账户。
设置全局账户。
1 |
|
为特定仓库设置局域账户。
1 |
|
检查账户配置情况。
1 |
|
1 |
|
1 |
|
GPG 签名相关
需要注意的是,这里只涉及 ssh 密钥和 Git 账户的配置,未涉及 GPG 签名的配置。如果创建了 GPG 签名,也要分账户进行类似 Git 的配置。
例如,为全局账户配置 GPG 签名。
1 |
|
不常用账户不使用 GPG 签名。
1 |
|
上述设置结果均可使用git config -l
命令进行检查。
在 Git 上提交代码
基本
拉取代码到本地。
1 |
|
写完代码后,在 Git bash 中进入代码文件夹下,将代码写入缓存。
1 |
|
写 commit message。
1 |
|
提交至 master 分支。
1 |
|
进阶
给 commit 写注释
在 Github/Gitlab 网页版或者 Github 桌面版,每次提交,除了给 commit 写标题,还可以写比较详尽的注释;在命令行中,写两次-m
,分别写标题和注释即可。
1 |
|
撤回本地提交
当 commit 已在本地提交,但尚未 push 至远程仓库时,若想撤回本地提交,则需使用git reset
。
进一步地
撤回本地提交但不撤回已修改的代码,使用git reset
;
撤回本地提交且撤回已修改的代码,使用git reset --hard
。
具体操作
首先获取 commit id(即数字+不区分大小写字母组成的 40 位字符串,或者用前 6 位也可)。
1 |
|
会打印出包括仅本地提交在内的提交记录,找到想要撤回的 commit 的前一个 commit id,例如前一个 commit id为666666
,则
1 |
|
之后可按正常流程再次提交代码。
应用场景
单纯想撤回某次本地提交
本地仓库与远程仓库冲突,在未拉取远程仓库更新的情况下,向本地仓库进行了提交。
即使在远程更新与本地提交未涉及相同文件时,强行拉取远程仓库,仍会产生不必要的”Merge …”提交。
此时可以撤回本地提交,先拉取远程更新,假装无事发生。