上篇文章我们简单的介绍了Git的诞生和发展,然后也说了Windows环境下Git的安装和一些基本的配置,本文我们就来说一说Git中的一些基本概念和基本操作。
本文是Git系列的第二篇,了解前面的文章有助于更好的理解本文:
1.Git概述
工作区和暂存区
和Svn有很大的不同,Git中引入了暂存区/缓存区(Stage/Index)的概念,如下图:
1.工作区很好理解,就是我们能看到的工作目录,就是本地的文件夹。2.这些本地的文件夹我们要通过git add命令先将他们添加到暂存区中。3.git commit命令则可以将暂存区中的文件提交到本地仓库中去。
在Svn中我们都是直接将文件提交到版本仓库中去,而在Git中,则多了一层关卡。
基本操作
下面我主要介绍一下Git中的常见操作。
初始化仓库
仓库的初始化有两种方式:一种是直接从远程仓库克隆,另一种则是直接从当前目录初始化,这里我们主要介绍当前目录初始化,远程仓库克隆我们在后面的文章中会说到。从当前目录初始化的方式很简单,直接执行如下命令:
$ git init
执行完成后当前目录下会多出一个.git的隐藏文件夹,所有git需要的数据和资源都存放在该目录中。
查看仓库状态
我们可以通过git status命令来查看仓库中文件的状态,比如,在我们仓库刚刚初始化完成之后,我们执行git status命令,执行效果如下:
执行结果首先展示了我们当前处于master分支下,然后又说暂时没有东西可以提交,因为当前仓库中还没有记录任何文件的任何状态。此时,我在当前目录下创建一个名为git01.txt的文件,然后再执行git status命令,如下:
此时执行结果中显示有一个未被追踪的文件就是我们刚刚添加的git01.txt,这个表示该文件目前并未被git仓库所管理,所以接下来我们要将这个文件添加到暂存区。
添加文件到暂存区
git add命令可以将一个文件添加到暂存区,我们现在已经有一个git01.txt文件了,接下来,执行如下命令将文件添加到暂存区中:
$ git add git01.txt
文件添加到暂存区之后,我们再执行git status命令,可以看到如下结果:
文件提交到暂存区之后,我们看到此时的状态已经发生了变化。
提交到本地仓库
当文件提交到暂存区之后,此时我们可以通过git commit命令将当前暂存区的文件提交到本地仓库,如下:
注意,执行commit命令时,我们需要加上提交备注,即-m参数,提交成功之后,我们再执行git status命令,结果如下:
此时一切又恢复宁静了,没有需要add的东西,也没有需要commit的东西。
提交成功之后,我们可以通过如下命令修改提交备注:
git commit –amend
查看提交日志
有的时候我们要查看的命令并不用这么详细,可以在git log后面加上–pretty=short,这样显示出来的就只是简略信息了:
此时显示出来的是我们这个仓库中的所有日志信息,如果我只想查看某一个文件的提交日志,在git log后面加上文件名即可。如下:
如果我还想查看提交时文件的变化,加上-p参数即可,如下:
绿色的 表示新增的行,红色的-表示删除的行(当然这里没有删除的行)。
但是git log有一个局限性,就是不能查看已经删除的commit的日志,举个例子:下班了,我发现今天下午提交的代码全都是有问题的,于是做了一个版本回退,回退到今天早上的状态,然后关机回家,第二天来了后我发现搞错了,其实那些代码都是OK的,于是我又想让仓库版本前进到昨天下午的状态,却发现git log命令查看不到昨天下午提交的版本号。此时,我们可以使用git reflog命令来实现这一个请求,git reflog命令可以显示整个本地仓库的commit, 包括所有branch的commit, 甚至包括已经撤销的commit, 只要HEAD发生了变化, 就会在reflog里面看得到,而git log只显示当前分支的commit,并且不显示删除掉的commit。如下图:
查看更改前后的差异
使用git diff命令我们可以查看工作区和暂存区的区别以及工作区和最新提交的差别。我往git01.txt文件中再添加一行hello world,此时执行git diff命令,结果如下:
此时这里显示我们新增了一行。此时我们执行git add命令,将文件提交到暂存区,然后再执行git diff,如下:
此时没有任何信息输出,因此此时工作区的内容和暂存区的内容已经保持一致了。但是此时工作区和本地仓库中最新提交的内容还是不一致,我们可以通过git diff HEAD命令来查看,如下:
此时我们需要执行git commit命令将暂存区中的文件提交,提交成功之后,再执行git diff HEAD命令,则又恢复宁静了。如下:
压缩提交历史
git rebase -i命令可以实现提交历史的压缩。比如我们在开发某一个功能时,提交了很多次,当所有功能都写完时,想将这些提交压缩为一个,就可以使用该命令,如下:
OK,Git基本操作我们就先说这么多,有问题欢迎留言讨论。
参考资料:
1.《GitHub入门与实践》2.《Pro Git》