一、创建远程仓库(GitHub)
1.GitHub网站地址:https://github.com/,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。
2.由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要如下设置:
第1步:创建SSH Key。在用户主目录下(例如:C:\Users\Administrator\),看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "wheeky@163.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,全部使用默认值即可;
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,最后点击“Add Key”按钮完成。
说明:为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
二、添加远程库
1.登录GitHub网站,并按网站要求创建一个新的仓库;
2.根据GitHub网站提示,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
3.本地仓库与GitHub上相应的仓库建立关联,代码如下:(git@github.com:wheeky/ZControls.git为我新建的仓库路径)
$ git remote add origin git@github.com:wheeky/ZControls.git
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
4.把本地库的内容推送到远程库上,用git push
命令,实际是把当前分支master
推送到远程。
$ git push -u origin master
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令(不用带-u参数)。
当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes
回车即可。
5.通过GitHub上的仓库来克隆出新的本地仓库,代码如下:(克隆出新的本地仓库文件夹为:ZControls)
$ git clone git@github.com:wheeky/ZControls.git
Git支持多种协议,默认的git://
使用ssh,但也可以使用https
等其他协议,使用https
除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh
协议而只能用https
。
三、分支管理
1.分支的作用:创建一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
2.创建分支(dev):
$ git checkout -b dev //git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
用git branch
命令查看当前分支,git branch命令会列出所有分支,当前分支前面会标一个*号。
用git checkout命令切换分支,如下代码,切换到master分支:
$ git checkout master
3.合并分支:(用git merge命令合并指定分支到当前分支)
$ git merge dev //默认启用Fast forward模式,若合并后再删除分支,则删除分支后,会丢掉分支信息
$ git merge --no-ff -m "merge with no-ff" dev //使用--no-ff参数,表示禁用Fast forward模式,Git就会在合并时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
4.删除分支:
$ git branch -d dev //若需要强制删除,则-d参数应改变为大写,如:git branch -D dev
5.查看分支合并情况:
git log --graph
6.临时隐藏工作区:(常见的场景是,当我们需要临时处理其它事情【如:解决BUG】时而不得不暂时中断目前的主要开发任务)
$ git stash //隐藏目前工作区
$ git checkout master //切换到需要建立临时分支的分支,比如:master
$ git checkout -b issue-101 //建立并切换到临时分支,issue-101
$ git add file //添加到暂存区
$ git commit -m "fix bug 101" //提交到临时分支仓库
$ git checkout master //回到master分支
$ git merge --no-ff -m "merged bug fix 101" issue-101 //合并临时分支,这里禁用fast foward模式,保留提交记录以便日后可查或恢复
$ git branch -d issue-101 //删除临时分支
查看被隐藏的工作区信息:
$ git stash list
恢复工作区:
$ git stash pop //相当于以下两条命令
$ git stash apply //恢复工作区
$ git stash drop //清除隐藏区
7.查看远程库:
$ git remote
$ git remote -v //加上-v参数可以查看详细信息
8.推送分支到远程库分支:
$ git push origin 分支名
9.创建本地分支并关联远程分支:
$ git checkout -b 分支名 origin/分支名 //origin/dev为远程分支路径
$ git branch --set-upstream 分支名 origin/分支名 //若本地已有分支,可通过该命令来关联远程分支
10.解决冲突:
10.1若是本地多分支之前合并产生冲突,可以先用git status命令查看原因,并依据提示修改相应的文件后,再重试即可;
10.2若是多人协作,向远程推送提交时产生冲突,则需先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送,如下:
$ git pull //从远程获取分支
$ git commit -m "marge files" //本地更新合并
$ git push origin dev //推送提交到远程分支