command

  • 撤销到上一个版本:git reset —soft HEAD^

    配置

    问题

    当有多个git账号的时候,比如一个github,用于自己进行一些开发活动,再来一个gitlab,一般是公司内部的git。这两者你的邮箱如果不同的话,就会涉及到一个问题,生成第二个git的key的时候会覆盖第一个的key,导致必然有一个用不了。

    解决

    我们可以在~/.ssh目录下新建一个config文件配置一下,就可以解决问题

当有多个git账号时,比如:
一个github,用于自己行一些开发活动
一个gitlab,用于公司内部的git
这两者如果邮箱不同的话,在生成第二个key的时候会覆盖第一个的key,会导致一个用不了。
解决办法就是:
生成两个(或多个)不同的公私密钥对,用config文件管理它们。

步骤

我们假设原来在~/.ssh目录下已经生成了一个密钥对:
id_rsa
id_rsa.pub

  • 生成第二个key

接下来我们生成第二个ssh key:

  1. ssh-keygen -t rsa -C "your email"

这里不要一路回车,我们自己手动填写保存路径:

  1. Generating public/private rsa key pair.
  2. Enter file in which to save the key (/c/Users/你电脑的设备名/.ssh/id_rsa): /c/Users/你电脑的设备名/.ssh/github
  3. work)/C:/Users/Administrator/.ssh/github_ssh(这个名字可以自命名)

<剩下两个直接回车>
这里我们用owner_ssh来区别原有密钥对,避免被覆盖。
完成之后,我们可以看到~/.ssh目录下多了两个文件,变成:
github_ssh
github_ssh.pub
known_hosts(自动生成)

  • 打开ssh-agent

这里如果你用的github官方的bash,用:
ssh-agent -s
如果是其他的,比如msysgit,用:
eval $(ssh-agent -s)
略过这一步的话,下一步会提示这样的错误:Could not open a connection to your authentication agent.

  • 添加私钥

ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_github
如果提示文件或目录不存在,就使用绝对地址。

  • 创建config文件

在~/.ssh目录下创建名为config的文件。
添加一下内容:

github

  1. Host github.com
  2. HostName github.com
  3. PreferredAuthentications publickey
  4. IdentityFile ~/.ssh/github_ssh

其中,Host和HostName填写git服务器的域名。
IdentityFile指定私钥的路径。
如果在Linux系统下提示错误:Bad owner or permissions on /home/gary/.ssh/config
说明config权限过大,chmod命令调整:
$ chmod 644 ~/.ssh/config
然后在github和gitlab上添加公钥即可,这里不再多说。

  • 测试

然后用ssh命令分别测试:
ssh -T git@github.com

  • 调试

如果到这里你没有成功的话,别急,教你解决问题的终极办法—debug
比如测试github:
ssh -vT git@github.com
-v 是输出编译信息,然后根据编译信息自己去解决问题吧。
就我自己来说一般是config里的host那块写错了。

关于用户名

如果之前有设置全局用户名和邮箱的话,需要unset一下

  1. git config --global --unset user.name
  2. git config --global --unset user.email

然后在不同的仓库下设置局部的用户名和邮箱
比如在公司的repository下

  1. git config user.name "yourname"
  2. git config user.email "youremail"

在自己的github的仓库在执行刚刚的命令一遍即可。
这样就可以在不同的仓库,已不同的账号登录。

补充一下

如果之前有设置全局用户名和邮箱的话,需要unset一下

  1. git config --global --unset user.name
  2. git config --global --unset user.email

然后在不同的仓库下设置局部的用户名和邮箱
比如在公司的repository下git config user.name “yourname” git config user.email “youremail” 在自己的github的仓库在执行刚刚的命令一遍即可。
这样就可以在不同的仓库,用不同的账号登录。