好了,到这里我们的Git就安装完成了,嘿嘿!下面我们来进行基本配置:
1.$ git config --global user.name "Your Name"
2.$ git config --global user.email “email@example.com”
注,我这里根据我的情况设置如下(如上图):
1.$ git config --global user.name "chenmingqian"
2.$ git config --global user.email “mingqian_chen@163.com”
我们在上一篇文章说过Git是分布式控制系统,所以,每个客户端都必须设置:你的名字和邮箱。这样才容易区分是哪个用户提交的Git版本,嘿嘿!大家可以看到git config 后面接的是--global参数,这表示你的机器上所有的Git仓库都会使用这个配置,但你也可以对不同的仓库指定不同的用户名和邮箱。这个我们会在后面的文章中讲解,这里不作说明,嘿嘿!有兴趣的博友可以先提前google一下。
四、创建本地仓库
1.版本库又称仓库
版本库或者是仓库,英文名Repository,其实啊说白了就是一个目录而且,这个目录中的所以文件都被git管理而且,不管你做什么操作都会被记录,包括:增加、删除、修改文件等,都会被记录下来,以便后来跟踪与修改相关记录,甚至被还原。好了,下面我们就在我们客户端(我这里演示的是Windows客户端,其它客户端操作一样)中创建一个版本库:
大家可以看到我们在/c/Users/root/下创建一个空目录pro即可project简写。还有一点需要说明的在Windows系统中目录名称不要使用中文,不然会出现神马问题,我不负责。嘿嘿^_^…… 2.目录变成仓库
执行git init命令,即可Initialized empty Git repository in c:/Users/root/pro/.git/,初始化一个空目录,路径为c:/Users/root/pro/.git/。大家可以看到pro目录中生成了一个隐藏目录 .git目录,进入目录中大家可以看到里面有很多文件,没事不要修改或者改动里机的文件,这里面的文件就是控制和管理版本库的,嘿嘿。至于里文件的具体作用我们会在后面的文章中讲解,想提前了解的朋友可以先google一下。
3.向本地仓库中增加文件
下面我们向版本库中增加文件,需要注意的是,在版本库中只能跟踪和管理文本文件,比txt文件、js文件、php文件、java文件等,所有的程序代码都可以的。但是像视频、图片等这些二进制文件,虽然能由git管理,但是只能记录大小,无法跟踪具体修改了什么,嘿嘿。大家懂了吧。好了,下面我们来增加一个readme.txt文件,其内容如下:
1.This is git test.
2.Git is a version of the best controller.
3.……
注意,新建的readme.txt文件,一定要在pro目录,不然git无法管理这里文件哦,嘿嘿!下面我们把个文件放到版本库中。
1).git status 命令
我们先用git status命令查看一下,如上图。大家可以看到git记录我们新增加一个文件readme.txt,并且提示这个文件还没有被提交。下面我们用git add命令提交一下。
2).git add 命令
git add 命令是告诉git,我们要把什么文件提交到仓库中去,大家可以看我们执行git add readme.txt命令后,没有任何提示。那就说明我们提交完成了。下面我们通过git commit命令,将readme.txt文件提交到版本库中。
3).git commit 命令
1.$ git commit -m "add readme.txt"
2.[master (root-commit) e5d662b] add readme.
3.1 file
changed, 3 insertions(+)
4.create mode 100644 readme.txt
大家可以看到我们用git commit命令提交readme.txt文件,给出的提示是 1 file changed, 3 insertions(+),一个文件改变,插入了三行内容。与我们上面增加三行内容一致。嘿嘿!下面我们简单的说明一下git commit命令,其中的参数-m后面输入的是本次提交的版本说明,可以输入任意内容,但需要说明的是,最好写有意义的说明,便于以后查看。
4).git status 命令
最后我们再用git status命令查看一下版本库的状态,提示没有任何内容需要提交说明我们向版本库增加文件成功了,嘿嘿。
4.总结
1).初始化一个Git仓库,使用git init命令
2).添加文件到本地Git仓中,分为两步:
1.$ git add file1.php
2.$ git add file2.php
3.$ git add file3.php
4.$ git commit –m “add file1.php file2.php file3.php”
好了,到这里我们创建本地git仓库和向仓库中增加文件的内容就讲解完成了,下面我们来详细讲解一下Git本地仓库的管理,内容有点多请大家慢慢看,嘿嘿!
五、本地仓库管理详解
1.查看工作区的状态(git status)
在上面的文章中我们成功的增加了一个readme.txt文件,并用git status命令查看了状态,在这节中我们就详细的说一下git status命令。我们修改一下readme.txt中的内容如下:
1.This is git test.
2.Git is a version of the best conntroller.
我们删除了最后一行,现在我们再用git status命令查看一下状态:
从上图中我们可以看到,我们用git status命令查看一下,我们得知readme.txt文件被修改过了,但是还没有提交这个修改。但是有博友会问了,git提示我们这个readme.txt这个文件被修改了,但我们想看看具体修改了什么内容怎么办呢?这个时候我们需要git diff命令出场了,如下图:
大家可以从上面图片中可以看到,我们删除了最后一行的……省略号。嘿嘿,用红颜色标出来的。好了知道修改了什么,下面我们就提交修改吧,提交修改和提交新文件一致,也是两步,先add,再commit。如下图:
大家可以看到我们执行git add命令,同样没人输出。但是,我们可以用git status命令查看一下。下面我们用git commit命令提交到本地版本库,如下图:
同样的我们使用git status命令查看一下状得知我们修改的readme.txt文件已提交。好了,到这里我们的git status命令就讲解完成了,同时我们也讲解一个git diff命令,可以查看我们修改了哪些内容。下面我们来讲解一下版本回滚。 2.版本回滚 在上面一个章节中我们演示修改文件并提交文件,再用git status命令查看状态,下我们再修几个版本并提交:
好了,就这样我们不断的修改并提交到本地的版本库中。一会你测试的时候发现前修改的版本有问题想回滚到前面的版本,或者你误删除了一些文件,想回到上一个commit中去,然后继续工作。我们应该怎么办呢?在Git版本控制中,我们所有的操作都是有历史记录的,我们用git log命令查看一下(如下图):
大家可以看到,用git log命令可以查看最近几次提交的版本。如果你发现内容太多,可以用这个命令查看(如下图):
上面你看到的一大串数字,其实是commit id(即,版本号),和svn不一样,Git的commit id不是1,2,3……这样的递数字,而是一相SHA1计算出来的哈希数,用16进制表示。有博友会问了,为什么Git的commit id不是1,2,3……这样的递增数字,而是用SHA1算出来的哈希数来表示呢?大家应该知道Git是分布式管理系统,我们会有多个人同时开发,如果大家都用1,2,3……这样的递增数字,作为版本号,那不就冲突了嘛,嘿嘿。好了,下面我们来说版本回滚,准备把readme.txt回滚到“add readme.txt“的那个版本,我们应该怎么做? 我们先来说一下,Git的当前是在哪个版本,在Git中我们用HEAD表示当前版本,也就是我们最新提交的”749f84ccb87……ff2q6ad“,上一个版本就应该这么表示”HEAD^“,再上一个版本就这样表示”HEAD^^“,当然如果有几十个版本或者1000个版本,我们还要写1000个^,这是不可能的,所以哟。我们写成这样HEAD~1000。好了,现在我们就用git reset命令,将我们的版本回退到”add readme.txt“中吧,如下图:
大家可以看到,我们回到了”add readme.txt“版本中了,下面我们再来查看一下git log,如下图:
有个问题哦,有没有发现我们最后提交的那个版本不见了,如上图。现在只有三个版本了,这说明什么问题呢?举个简单的例子说明一下,就好比你从现在回到了18世界,想再回到21世界已经回不去了,那应该怎么办呢?只要我们找到最新版本的commit id,我这里新版本的commit id是”749f84ccb87……ff2q6ad“,于是就可以回到未来的某个版本,就好比我们知道现在的时间,就能回到现在。下面我们来演示一下(如下图):
好了,大家可以看到我们又回到最新版本,嘿嘿。现在你回退到某个版本中,已经关掉了Git bash。但是呢,你又后悔了,想恢复到新版本中,但是呢?你又找不到commit id了,那又该怎么办呢?在Git中,我们当时用$ git reset --hard HEAD^^^,回退到“add readme.txt”版本时,再想恢复到最新版的 “add a line distributed” 中,必须有commit id才行,这时我们已经关闭了Git bash。在Git中提供了一个git reflog命令,是用来记录你每一次执行的命令,下面我们来演示一下(如下图):
嘿嘿,现在我们又可以回去最新版了。好了,到这里我们的回滚版本就讲解完成了。下面我们来说一下,工作区、提交区/暂存区(stage/index)、版本库。 3.工作区、提交区/暂存区(stage/index)、版本库
其实呢,工作区、提交区/暂存区(stage/index)、版本库的概念问题,从上图中就能看的很清楚,本来不想细讲的,但想想还是说一下。Git与其他版本版本控制器其中之一的不同之处就在于有提交区/暂存区(stage/index)的概念。下面我们先来看一下工作区:
其实呢,工作区就是我们开发目录了,在电脑中是可能看到的,比如我们这里的pro目录,就是一个工作区。大家再来看一下,下面的两张图:
大家可以看到,工作区中有个隐藏的目录“.git”,这个不是工作区哦,这个就是Git的版本库。大家再看下面两张图:
大家可以看到,在“.git”目录中有很多文件,其中一个重要的文件index,就是我们说的提交区/暂存区(stage/index)。暂存区(stage, index)是 Git 最重要的概念之一,理解了这个概念很多 Git 命令就不再那么神秘了。对于 Git 暂存区(stage) ,不知道您的感想如何?
在上图中,我们可以看到部分 Git 命令是如何影响工作区和暂存区(stage/index)的。
下面我们修改一下readme.txt内容,增加一行:Git rest 1.如下图:
下面我们用 git add 命令提交一下,如下图:
下面我们再修改一下readme.txt文件,如下图:
我们又增加一行 Git test 2. 如下图:
、 下面我们提交一下,如下图:
下面我们再查看一下状态,如下图:
大家可以看到我们第二次没有被提交,怎么会这样呢?细心的博友可以看到我们第二次修改后,直接执行 git commit了。没有执行 git add 命令,前面我们说了,当你用“git add”命令后,在工作区的第一次修改被放入暂存区,准备提交。但是,在工作区的第二次修改并没有放入暂存区,所以,“git commit”只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。下面我们用 git diff 命令查看一下工作区与版本库里面的区别:
大家可以从图上看到,我们增加 Git test 2. 还没有提交,嘿嘿!那么第二次修改怎么提交呢?其实我们再add再commit,就可以了。如下图:
好了,现在,你又理解了Git是如何跟踪修改的,每次修改,如果不add到暂存区,那就不会加入到commit中。那么我们想取消修改的版本,又该怎么取消呢?下面我们继续…… 2).取消(撤消)修改 下面我们来讲解怎么撤消修改,一般情况下我们是不会出错的,但是项目比较紧,老是有人在催你(这个你懂的),突然出错了,我们想取消修改那又怎么办呢?如下图:
在你要提交之前,你发现在有错误了,应该是101。既然错误发现得很及时,就可以很容易地纠正它。你可以删掉最后一行,手动把文件恢复到上一个版本的状态。我信先用git status查看一下,如下图:
如上图,Git会告诉你有你个文件被修改,你有两个选择,一个用 git add 提交到暂存区,另一个是用git checkout可以丢弃工作区的修改。命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
大家可以看一下 readme.txt 文件果然还原到上一个版本了,嘿嘿!大家注意哦,git checkout -- file命令中的“--”很重要,没有“--”,就变成了“创建一个新分支”的命令,我们在后面的文章中将详细讲解分支管理。真是祸不单行啊,我们不但程序写错了,还 git add 到暂存区了,如下图:
不管怎么样,我们先查看一下状态吧,如下图:
大家可以看到Git告诉我们,用 git reset HEAD file 可以把暂存区中的修改撤消掉,重新放回工作区,如下图:
git reset命令既可以回退版本,也可以把工作区的某些文件替换为版本库中的文件。当我们用HEAD时,表示最新的版本。我们再用 git status 查看一下发现,现在的暂存区是干净的,工作区有修改。 那说明我们撤消成功,嘿嘿!下面我们再执行 git checkout命令撤消工作区修改,如下图:
好了,到这里我们终于撤消回来了,嘿嘿。现在,假设你不但改错了东西,还从暂存区提交到了版本库,怎么办呢?还记得版本回退一节吗?可以回退到上一个版本。不过,这是有条件的,就是你还没有把自己的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?我们后面会讲到远程版本库,一旦你把错误提交推送到远程版本库,你就真的惨了……大家小心就好,哈哈……好了,下面我们来总结一下:
一般我们直接在目录中把没用的文件删了,或者用rm命令删了,下面我们来演示一下:
大家可以看到,我们用 git status 查看一下状态,现在我们有两个选择,一个是从版本库中删除该文件,就 git rm 命令删除掉并用 git commit提交,另一种情况删错了,因为版本库里还有所以可以很容易的恢复。下面我们来演示一下情况1:
好了,下面我们来看一下情况2:
git rm 命令用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。好了,到这里我们删除文件就讲解完成,嘿嘿。 六、总结 在一篇博客中我们讲解了Git 本地版本库的讲解,在下一篇博客中我们主要讲解Git 远程仓库详解,好了到这里这篇博客到这里就全部完成。本人能力有限,有任何问题欢迎大家提出并讨论。最后,希望大家有所收获^_^……