Git常见问题

Git如何配置多个仓库?


生成sshkey

  • 终端中输入下面命令

    $ ssh-keygen -t rsa -C "your_mail"
  • 然后输入你想要保存的文件名,如id_rsa_gitlab(默认保存/home目录/.ssh/id_rsa文件)

  • 然后将公钥复制黏贴到github的ssh key中

    $ pbcopy < ~/.ssh/id_rsa_gitlab.pub

为每一个仓库设置独立的配置信息

  • git config –local user.email ‘your_mail’
  • git config –local http.proxy http://localhost:8123

    设置shadowsockts代理,一般github可以设置一下(如果不清楚ss代理点击这里

如何访问不同的仓库呢

  • 终端中添加私钥

可以配置在bash中,这样就没有必要每次都添加,/home目录/.bash_profile;如果用的是zsh,配置在~/.zshrc中

  1. ssh-add ~/.ssh/id_rsa_github
  2. ssh-add -l 查看所有添加的私钥
  • 单独为公司的gitlab设置ssh信息
Host gitlab.xxx.com #随便命名
HostName gitlab.xxx.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa_gitlab


切换分支的时候不想commit怎么办



git stash

将当前的改动暂存到栈中,或者git stash save “不想提交的内容”
git stash list
查看所有暂存的改动
git stash apply stash@{2} 或者 git stash pop stash@{2}
恢复stash@{2}的暂存,如果没有写那默认就是最近一次暂存


commit之后不想提交怎么办



git reset –hard commit_id

commit_id为你想要回退的版本号id


rebase和merge区别



Git提交的Network中,我们会经常会碰到很乱的commit,多个分支交错在一起。这个时候我们可能要思考是否使用rebase进行代码合并了。先来介绍一下最常用的merge合并。

merge合并

git checkout master
git merge experiment
git push origin master

merge合并会产生一个新的commit,合并后的代码网络图如下图所示:

git merge

rebase合并

git checkout experiment
git rebase master
git checkout master
git merge experiment
git push origin master

rebase其实将commit重新排列了。

找到experiment、master的最近公共祖先(最近的相同的commitid),并且将experiment,在commitid之后的提交全部放到了master最后一次commit之后,然后进行合并。

如果第二步的合并过程有冲突,那就解决冲突,然后输入命令 git rebase –continue

合并后的代码网络图如下图所示:

git rebase

使用rebase需要注意的地方

  1. rebase合并的分支(experiment)一定是没有提交到远程服务器的分支,一旦提交远程服务器,那么commmit的顺序就会被更改,导致他人使用的时候出错

  2. git pull –rebase 通过rebase进行拉取代码,可以较少不必要的提交。git pull 默认使用git fetch+git merge操作。

To Be Continue



今后会持续更新Git的相关使用