Git 笔记
仓库的区别:
- 暂存区
这个是我们每一次进行代码修改的地方,例如我们idea的所编译的代码就是缓存区。 - 本地仓库
是我们每一次pull,从远程仓库pull(拉取)到地方,这个地方就是本地仓库 ,他其实就是远程仓库的一个副本。 - 远程仓库
这个是存放到服务器上的代码,是每一个人认为自己的代码修改好了,就可以集体上传到一个地方,而你也可以从这个地方下载别人的代码,这个地方就是远程仓库。
commit/pull/push 的区别
注意:如果本地仓库关联着一个远程仓库,先 git add 文件名,git commit,再先 pull 再 push,不然可能会有冲突
- pull
将本地库所关联的远程库commit ID 更新到最新的同时,还自动合并了远程仓库的代码
git pull = git fetch + git merge
git fetch 只会将本地库所关联的远程库commit ID 更新到最新
git merge 才会把文件合并过来,此时才修改本地库代码 - commit
当我们想要把自己的代码想要提交到远程的时候,所用的命令行语句,由于我们修改所在的区域在暂存区,我们首先要把自己的代码commit(提交)到本地仓库,然后在从本地仓库push到远程仓库。
但是切记住一点,我们如果每一次在commit的时候,我们都需要先从线上pull最新的代码到本地仓库,然后在把暂存区里面的代码提交到本地仓库,这个时候如果没有冲突固然是最好的,如果有了冲突,这我需要解决冲突,这个此时本地仓库已经是最新的代码且又包括暂存区上面的代码了(至于先commit还是先pull,这个说法不一) - push
这个就是我们前面把代码提交到了本地,如果我们需要提交到远程服务器上,则需要把代码push到远程的分支里面,如果有了冲突,再解决就好了。
多个密钥的情况
本段文档还不正常,大概是配置文件那一步的问题,无法多密钥
如果您同时用 GitHub,码云,Gitlab 这些中的某两个或多个,密钥管理可能就不一样了,如果邮箱相同,生成新密钥时,就会覆盖,导致之前的用不了。
我们可以在~/.ssh目录下新建一个config文件配置一下,就可以解决问题
具体步骤
找到管理密钥的文件夹,我的是在:C:\Users\qian.ssh,在这个文件夹里右键,打开 Git Bash Here ,或者先执行命令切换目录:cd C:/Users/qian/.ssh
生成第一个ssh key(这里我用于github,用的gmail邮箱)
ssh-keygen -t rsa -C"yourmail@gmail.com"
这里不要一路回车,第一个回车后,让你选择在哪里选择存放key的时候,冒号后面写个名字,比如id_rsa_github,这里如果没有写名字,直接回车,如果之前生成过密钥,则可能出现同名覆盖,之后的两个可以直接回车。
完成之后我们可以看到~/.ssh目录下多了两个文件
生成第二个ssh key(这里我用于gitlab,用的是公司邮箱)
ssh-keygen -t rsa -C"yourmail@gmail.com"
还是一样不要一路回车,在第一个回车后在冒号后面写个名字,比如id_rsa_gitlab,之后的两个可以直接回车。
一样出现两个文件,一个公钥一个私钥。
将私钥添加到 SSH agent
默认SSH只会读取id_rsa,所以为了让SSH识别新的私钥,需要将其添加到SSH agent
打开ssh-agent:
ssh-agent bash
授权给编辑器
ssh-add -D
删除私钥列表
ssh-add -l
查看私钥列表
这里如果你用的github官方的bash,ssh-agent -s,如果是其他的,比如msysgit,eval $(ssh-agent -s)
添加私钥
ssh-add ~/.ssh/id_rsa_github
ssh-add ~/.ssh/id_rsa_gitlab
创建并修改config文件
在windows下新建一个txt文本,然后将名字后缀一起改成config即可
在bash下的话直接touch config即可。
添加一下内容
gitlab
Host git.iboxpay.com
HostName git.iboxpay.com//这里填你们公司的git网址即可
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitlab
User zanyang
github
Host github.comHostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github
User L
在github和gitlab上添加公钥即可,这里不再多说。
测试:
$ ssh -T git@github.com
PS:如果到这里你没有成功的话,别急,教你解决问题的终极办法--debug
比如测试github,ssh -vT git@github.com
-v 是输出编译信息,然后根据编译信息自己去解决问题吧。就我自己来说一般是config里的host那块写错了
补充一下
如果之前有设置全局用户名和邮箱的话,需要unset一下
git config --global--unsetuser.name
git config --global--unsetuser.email
然后在不同的仓库下设置局部的用户名和邮箱
比如在公司的repository下
git config user.name "yourname"
git config user.email "youremail"
在自己的github的仓库在执行刚刚的命令一遍即可。
这样就可以在不同的仓库,已不同的账号登录。
如何把本地项目上传到远程的空项目上
- git remote add origin 远程仓库地址
- 如果提示已有 origin 则先删除 git remote remove origin
- git push origin <分支名>