Git是分布式版本控制系统,同一个Git仓库,能够分布到不一样的机器上。怎么分布呢?git
好在这个世界上有个叫GitHub的神奇的网站,从名字就能够看出,这个网站就是提供Git仓库托管服务的,因此,只要注册一个GitHub帐号,就能够免费得到Git远程仓库。程序员
因为你的本地Git仓库和GitHub仓库之间的传输是经过SSH加密的,目的(为了确保数据传输的可靠性,由于GitHub须要识别出你推送的提交确实是你推送的,而不是别人冒充的),若是你不配置相关命令,则每次本地仓库和远程仓库提交时,都须要验证密码,为了方便,因此,须要一点设置:github
git设置免密码登陆,生成ssh秘钥命令shell
ssh-keygen -t rsa -C “<email>”
步骤1:命令输入完成后,一直回车。会在本地生成一个.ssh文件,打开该文件会看到默认保存位置当前 ~/.ssh/id_rsa(私密) 和id_rsa.pub(公密),将生成的公密用记事本打开,并复制。服务器
步骤2:把id_rsa.pub里的复制内容添加到github的ssh keys里,必定不能有空格在密钥里面。
以下图:ssh
“Add Key”,你就应该看到已经添加的Key:分布式
点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容ide
在git Bash 中输入如下代码测试
$ ssh -T git@github.com
当你输入以上代码时,会有一段警告代码,如:fetch
The authenticity of host 'github.com (192.30.255.112)' can't be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)?
这是正常的,你输入 yes 回车既可。若是你建立 SSH key 的时候设置了密码,接下来就会提示你输入密码,如:
Enter passphrase for key '/home/jeremy/.ssh/id_rsa':
固然若是你密码输错了,会再要求你输入,直到对了为止。
密码正确后你会看到下面这段话,如:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
若是用户名是正确的,你已经成功设置SSH密钥。若是你看到 “access denied” ,则表示拒绝访问,那么你就须要使用 https 去访问,而不是 SSH 。
能够参考网站:
解决每次push代码到github都须要输入用户名和密码的方法
注意事项:在GitHub上免费托管的Git仓库,任何人均可以看到喔(但只有你本身才能改)。因此,不要把敏感信息放进去,形成信息泄露。若是你不想让别人看到Git库,有两个办法,一是:让GitHub把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。另外一个办法是本身动手,搭一个Git服务器,由于是你本身的Git服务器,因此别人也是看不见的。
如今的情景是,你已经在本地建立了一个Git仓库后,又想在GitHub建立一个Git仓库,而且让这两个仓库进行远程同步,这样,GitHub上的仓库既能够做为备份,又可让其余人经过该仓库来协做,真是一举多得。
首先,登录GitHub,而后,在右上角找到“New repository”按钮,建立一个新的仓库:
在Repository name填入studygit,其余保持默认设置,点击“Create repository”按钮,就成功地建立了一个新的Git仓库:
根据GitHub的提示,在本地的studygit仓库下运行命令
(1)将远程项目和本地项目进行关联
$ git remote add origin + 分支地址 //origin是远程库的名字,这是Git默认的叫法,也能够改为别的,可是origin这个名字一看就知道是远程库
(2).第一次推送master分支的全部内容到远程仓库
$ git push -u origin master //第一次提交须要这么作,第二次提交就能够直接用`git push origin master`或者 `git push `
把本地库的内容推送到远程,用git push命令,其实是把当前分支master推送到远程。
因为远程库是空的,咱们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在之后的推送或者拉取时就能够简化命令。
推送成功后,能够马上在GitHub页面中看到远程库的内容已经和本地如出一辙
使用 git clone 拷贝一个 Git 仓库到本地,让本身可以查看该项目,或者进行修改。
若是你须要与他人合做一个项目,或者想要复制一个项目,看看代码,你就能够克隆那个项目。 执行命令:
git clone [url] //[url] 为你想要复制的项目
克隆完成后,在当前目录下会生成一个新 目录,即会远程的目录名称。
*注意事项*:
要克隆一个仓库,首先必须知道仓库的地址,而后使用git clone命令克隆。另外,Git支持多种协议,包括https,但经过ssh支持的原生git协议速度最快。
几乎全部的版本控制系统都以某种形式支持分支。 使用分支意味着你能够把你的工做从开发主线上分离开来,以避免影响开发主线。
有人把 Git 的分支模型称为必杀技特性,而正是由于它,将 Git 从版本控制系统家族里区分出来。
git branch 分支名称
git checkout (branchname)
当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工做目录的内容, 因此多个分支不须要多个目录。
git checkout命令加上-b参数表示建立并切换
git checkout -b + 分支名称 至关于如下两条命令 git branch 分支名称 git checkout (branchname)
git branch
没有参数时,git branch 会列出你在本地的分支,默认是master。
$ git branch * master //意思是:有一个叫作 master 的分支,而且该分支是当前分支
若是须要查看每个分支的最后一次提交,能够运行 git branch -v 命令:
若是咱们要手动建立一个分支。执行 git branch (branchname) 便可。
$ git branch A //A为分支名称 $ git branch * master A
如今咱们能够看到,有了一个新分支 A。
当你以此方式在上次提交更新以后建立了新分支,若是后来又有更新提交, 而后又切换到了 testing 分支,Git 将还原你的工做目录到你建立分支时候的样子。
使用分支将工做切分开来,从而让咱们可以在不一样开发环境中作事,并来回切换。
git breach -d 分支名称
例如咱们要删除A分支:
$ git branch * master A $ git branch -d A Deleted branch A (was 85fc7e7). $ git branch * master
一旦某分支有了独立内容,你终究会但愿将它合并回到你的主分支。 你可使用如下命令将任何分支合并到当前分支中去:
git merge
切换回master分支后,把A分支的工做成果合并到master分支上:
$ git merge A
合并完后就能够删除分支:
$ git branch -d A
若是真的想要删除分支并丢掉那些工做,如同帮助信息里所指出的,可使用 -D 选项强制删除它。
Git鼓励大量使用分支:
查看分支:git branch 建立分支:git branch <name> 切换分支:git checkout <name> 建立+切换分支:git checkout -b <name> 合并某分支到当前分支:git merge <name> 删除分支:git branch -d <name> 强制删除分支:git branch -D <name>
若是master分支和A分支各自都分别有新的提交,这种状况下,Git没法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,
Git用<<<<<<<,=======,>>>>>>>标记出不一样分支的内容
再提交:
$ git add gitnote.txt $ git commit -m "conflict fixed" [master cf810e4] conflict fixed
注意:
当Git没法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为咱们但愿的内容,再提交。
用git log --graph命令能够看到分支合并图。
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,而且,远程仓库的默认名称是origin。
要查看远程库的信息,用git remote
:
$ git remote origin
或者,用git remote -v
显示更详细的信息:
$ git remote -v origin git@github.com:michaelliao/learngit.git (fetch) origin git@github.com:michaelliao/learngit.git (push)
上面显示了能够抓取和推送的origin的地址。若是没有推送权限,就看不到push的地址。
推送分支,就是把该分支上的全部本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
若是要推送其余分支,好比dev,就改为:
$ git push origin dev
建立远程origin的dev分支到本地,于:
$ git checkout -b dev origin/dev
多人协做的工做模式一般是这样:
首先,能够试图用git push origin <branch-name>推送本身的修改;
若是推送失败,则由于远程分支比你的本地更新,须要先用git pull试图合并;
若是合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
若是git pull提示no tracking information,则说明本地分支和远程分支的连接关系没有建立,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
这就是多人协做的工做模式,一旦熟悉了,就很是简单。
本人小白程序员,初来乍到,请多关照