手把手教你用git

1、如何安装git

下载地址:html

https://git-scm.com/download/wingit

根据本身的电脑选择是32位的仍是64位的。下载完后直接运行,以后一直next就行了。安装成功后,会有这样一个标志。github

 

2、如何使用git

(1)首先你要点进去https://github.com/这个网站,注册一个github帐号。注册好以后,要记住邮箱和密码。segmentfault

(2) 打开以前的那个图标就是这样一个窗口,首先Git是分布式版本控制系统,因此须要填写用户名和邮箱做为一个标识,分别输入这两个命令,用户名和邮箱须要换成本身的。安全

 

     (3)  打开以前的那个图标就是这样一个窗口。如今好比我在个人C:/wamp/www/aaa有一个项目,我要对它进行管理怎么办呢。直接在控制台里面输入  cd   c:/wamp/www/aaa  以后你就会在aaa这个目录里面了。那如何对它进行管理呢。直接在控制台输入git  initssh

 

      以后你去查看aaa目录里面发现里面多了这样一个东西编辑器

 

      这是一个隐藏文件夹,有点电脑看不见,是由于文件夹选项设置的隐藏文件不可见,这个去控制面板里的文件夹选择设置一下就行了。分布式

下面咱们接着来操做,试着开始写咱们的项目。网站

首先我写一个首页叫index.htmlthis

 

     如今我在个人页面里写好了这样一段话,保存以后咱们接着来进行操做。

如今咱们开始在git里面输入一段话 git status

 

咱们能够看到index.html这个文件是红色,这是说明咱们这个文件已经作了修改,可是还没保存到本地仓库里面。如今咱们接着执行操做 git add  index.html  敲完这个命令接着git status发现index.html变成绿色的啦。

 

接着咱们敲命令  git commit   -m  “the first time”

     敲完以后,接着使用git status发现上面说工做区很干净,没有文件要被提交。如今我来解释一下这几个命令。

      首先你得明白这几个概念,工做区就是你如今编辑器所处的那个工程里面,在这个指的就是aaa这个文件夹。刚才你写了一个index.html写完以后就是往工做区增添了一个文件,而后你用git status查看状态发现,index.html是红色的。git status是什么意思呢,就是查看你工做区和暂存区有没有文件没被提交到本地仓库,若是有工做室未向暂存区保存的就显示红色,若是有暂存区没提交到本地仓库的就是绿色。那么什么是本地仓库呢,就是一开始说的那个不可见的文件夹,你一执行git init命令就会有一个本地仓库出来

     如今咱们接着来看,如何从工做区把文件提交到暂存区,就是使用命令git add index.html就能够了。把文件从暂存区提交到本地仓库呢,就是使用命令git  commit  –m “the first time” 这个引号里面的内容是随意的,就是本身添加一个备注,好比本身改动了什么东西。理解了这句话,咱们接着进行操做,咱们个人index.html里面继续添加一段话。我再git status查看一下当前的状态,发现有未向暂存区提交的保存,接着咱们采用 git commit –m “the second time”命令将暂存区的文件提交到本地仓库。以后再用git status来查看一下,发现已经没有文件要提交了。

(4)版本回退

      到目前为止,咱们已经向工做区提交了两次修改。Git给咱们提供了一个git log 能够查看咱们最近的提交历史

 

 

      若是看的很乱,可使用这个命令,git log -–pretty=oneline

 

     能够看出来咱们的两次提交,前面那串黄色的就是咱们的版本号。如今我发现我第二次提交的代码运行很差使,想回到我原来的那个版本怎么办呢

可使用命令git reset –hard HEAD^这个命令是回退到上一个版本

 

     执行完以后,我再回头看看个人index.html发现已经变成了我第一次提交时的样子

     接着继续。万一要回退到上上个版本呢,可使用命令git reset –hard HEAD^^,那要是回到到一百个版本就要写100^吗,也太麻烦了吧

如今咱们经过git log –pretty=oneline已经获取到了每次修改的版本号。那么咱们就可使用git reset –hard 版本号就行了。好比刚才我要回退到上个版本就可使用git reset –hard 21a77

发现也一样有效果。这里版本号不用写全,写一部分能表示这个就行。如今咱们再用git log来查看一下如今的状态,发现咱们如今的版本只剩下一个了

 

     可是我如今又发现,我知道原来新版本的解决方法了,我又想回到新版本去怎么办呢,如今用git log已经看不到新版本的版本号了。只能采用新的命令了叫作git reflog查看命令历史

 

      在这里发现他记录了咱们全部的操做,如今咱们继续使用git reset –hard e2f3发现咱们又回到新版本了。咱们发现index.html已经回到原来的状态了。

 

 

      如今咱们接着往下面进行。在index.html里面咱们接着添加一行。

 

     后来发现这句话不是很合适,固然这个时候咱们能够把这句话直接删掉,而后再git add ,就行了。但也能够经过git checkout – index.html。此时咱们发现那句话已经没有了。这种状况适用于咱们没有git add到暂存区以前。若是咱们已经git add到暂存区了,怎么撤销修改呢。咱们可使用命令 git  reset HEAD index.html先撤销暂存区的修改,而后咱们能够经过命令git diff查看暂存区和工做区有什么不一样,以后咱们能够经过命令git checkout –index.html 发现已经修改好了。可是万一咱们已经提交到仓库里呢怎么办呢,也就是咱们git commit,那就要使用咱们上面所说的版本回退了。

(5)删除文件

      如今咱们在aaa目录下新建一个文件叫test.txt。咱们在里面随便写几个字以后,经过git add text.txt 已经git commit –m “the third time”就已经把test.txt已经写入本地库里了

假设如今咱们发现咱们已经不须要test.txt这个文件了,因此咱们把它给删了。这个时候你经过git status发现工做区和本地库里的文件不同了。

     如今咱们有两种选择,一种是咱们确实要删除。使用git rm test.txt 以后再git commit –m “remve test.txt”发现咱们的本地库里的文件已经被删除了。那么另一种状况就是我删错了,我想还原回来怎么办呢,使用命令git checkout – test.txt就发现这个文件已经还原了。

(6)远程仓库

     到目前为止,咱们已经学会了如何在本地库和工做区之间进行操做,那这时你就会说我没有看到如何分工协做呢,别着急,远程仓库还帮你解决这个问题。

首先你要点进去https://github.com/这个网站,登陆你刚才注册的github帐号

ssh-keygen -t rsa -C youremail@example.com

     把这个邮箱替换成本身的

以后一路回车,若是一切顺利的话你去你的C盘下去找你的user文件夹,有的叫用户,你在里面搜索一下有没有一个.ssh的文件夹,把它打开以后,里面有这几个文件

 

      以后接着打开那个https://github.com/网站,登陆进去。

 

     点击右边这个绿色的图表,点开下拉框以后里面有个setting

 

 

    以后会出来这样一个页面,点击左边的ssh keys

 

 

     打开以后是这样的一个页面,随便写入一个title而后打开你刚才找到的再C盘里的那个id_rsa.pub.把里面的内容复制到那个key里面去,以后点击添加便可。

以后回到一开始的这个页面,

 

 

   点击中间的那个加号

   选择第一个,这就至关于你本身在远程建了一个仓库。

 

 

     点击以后,会出来这样一个页面。如今咱们在那个名字哪里写上aaa,直接点击建立就好。

目前,在GitHub上的这个learngit仓库仍是空的,GitHub告诉咱们,能够从这个仓库克隆出新的仓库,也能够把一个已有的本地仓库与之关联,而后,把本地仓库的内容推送到GitHub仓库。

     如今,咱们根据GitHub的提示,在本地的aaa仓库下运行命令:

$ git remote add origin git@github.com:BrouceLee/aaa.git

请千万注意,把上面的BrouceLee替换成你本身的GitHub帐户名,不然,你在本地关联的就是个人远程库

添加后,远程库的名字就是origin,这是Git默认的叫法,也能够改为别的,可是origin这个名字一看就知道是远程库。

接着执行命令git push -u origin master

执行完以后,咱们发现咱们的远程库和本地仓库已经同步了。

 

 

     从如今起,只要本地做了提交,就能够经过命令:

$ git push origin master

把本地master分支的最新修改推送至GitHub,如今,你就拥有了真正的分布式版本库!

(7)从远程库克隆

     上次咱们讲了先有本地库,后有远程库的时候,如何关联远程库。

如今,假设咱们从零开发,那么最好的方式是先建立远程库,而后,从远程库克隆。

首先,登录GitHub,建立一个新的仓库,名字叫gitskills:

 

 

      咱们勾选Initialize this repository with a README,这样GitHub会自动为咱们建立一个README.md文件。建立完毕后,能够看到README.md文件:

如今,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:

咱们在想要建立项目的地方执行下面的命令

git clone git@github.com:BrouceLee/gitskills.git

     如今去你你想要建工程的地方开始,就能够发现大致上已经建好了。

(8)分支管理

      分支在实际中有什么用呢?假设你准备开发一个新功能,可是须要两周才能完成,第一周你写了50%的代码,若是马上提交,因为代码还没写完,不完整的代码库会致使别人不能干活了。若是等代码所有写完再一次提交,又存在丢失天天进度的巨大风险。

     如今有了分支,就不用怕了。你建立了一个属于你本身的分支,别人看不到,还继续在原来的分支上正常工做,而你在本身的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工做。

首先我来建立一个分支

执行命令git checkout -b dev 这样就建立好了一个dev分支

咱们来介绍一下,最开始的时候咱们的全部操做都是默认在一个叫作master的分支上操做的,包括提交到远程库,等等。关联远程库的时候也是从远程关联master分支。当咱们用dev这个分支写完一个项目以后,咱们要把这个分支所作的工做向master分支进行靠拢.

咱们如今能够经过命令git branch来查看一下全部的分支

git branch命令会列出全部分支,当前分支前面会标一个*号。

而后,咱们就能够在dev分支上正常提交,好比对index.html作个修改,加上一行

 

 

      而后咱们执行git add index.html以及 git commit –m “use the dev first”

如今我dev的分支工做已经作完,如今我能够切换回master分支。利用命令

git  checkout master

       切换回master分支以后,咱们发现index.html里面咱们新加的那句话不在了。由于咱们刚才是在dev分支上作的提交。如今咱们要把分支合到master上,就利用命令 git merge dev就能够了,此时再去查看index.html发现咱们在dev里面作的操做已经在master里面了。如今咱们可使用命令git branch –d dev来删除dev这个分支,以后再使用git branch来查看分支发现只有master一个分支了。由于建立、合并和删除分支很是快,因此Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工做效果是同样的,但过程更安全。

3、解决冲突

      如今咱们考虑这样一种状况,咱们新建了一个分支feature1,利用feature1来进行把index.html里面再加一行,首先切换到feature1这个分支,而后修改index.html,以后提交

 

 

     而后咱们切换回master分支,如今咱们在master里的index.html里面加一句话,以后进行提交。以后咱们按照刚才的那种方式合并两个分支。git merge feature1会发现有冲突出现

 

 

此时应该怎么解决呢,此时必须手动解决冲突。

四.分支策略

在实际开发中,咱们应该按照几个基本原则进行分支管理:

首先,master分支应该是很是稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,好比1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每一个人都在dev分支上干活,每一个人都有本身的分支,时不时地往dev分支上合并就能够了。

因此,团队合做的分支看起来就像这样:

 

最后推荐一个详细的分工合做的网站,必定要看。http://www.javashuo.com/article/p-udnzcefn-ds.html