Git基本操作

上篇文章我们简单的介绍了Git的诞生和发展,然后也说了Windows环境下Git的安装和一些基本的配置,本文我们就来说一说Git中的一些基本概念和基本操作。

本文是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命令,此时会自动打开一个vi编辑器,我们直接在编辑器中输入备注信息即可。假设我在git01.txt中随意添加一行内容,然后依次执行git add、git commit命令,此时系统会自动打开一个vi编辑器,如下:

如图所示,我们在vi编辑器中按照既定的格式编辑内容,编辑完成之后保存退出,此时文件就commit成功了。如果在备注信息编辑的过程中我们不想提交了,则直接删除备注信息,保存退出,此时提交就终止了,如下:

提交成功之后,我们可以通过如下命令修改提交备注:

git commit --amend

运行该命令,会自动打开vi编辑器,此时我们可以重新编辑上次提交的备注信息。

查看提交日志

通过git log命令我们可以查看以往仓库中提交的日志,比如提交的版本号、提交者、提交者邮箱、提交时间、提交备注等信息,如下:

有的时候我们要查看的命令并不用这么详细,可以在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命令可以实现提交历史的压缩。比如我们在开发某一个功能时,提交了很多次,当所有功能都写完时,想将这些提交压缩为一个,就可以使用该命令,如下:

如上图,该命令执行之后,会自动打开一个vi编辑器,在vi编辑器中将最新提交的日志的pick改为fixup即可。压缩之后,最新一次的提交日志就没了,但是数据还在。

OK,Git基本操作我们就先说这么多,有问题欢迎留言讨论。

参考资料:

1.《GitHub入门与实践》 2.《Pro Git》

原文发布于微信公众号 - 玩转JavaEE(gh_d1ca11234a30)

原文发表时间:2017-11-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

【收藏】Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!

因为教程详细,所以行文有些长,新手边看边操作效果出乎你的预料。GitHub虽然有些许改版,但并无大碍。

11430
来自专栏Java成神之路

Git之 手把手教你使用Git

      SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活, 干...

7020
来自专栏CodingToDie

GIT 使用(二):创建仓库并提交代码

基本操作 所用命令使用 windows 下安装 git-bash 运行 Table of Contents 先决条件 已经安装了 GIT 客户端 已经设置用户信...

43750
来自专栏Java后端技术栈

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!

导读:因为教程详细,所以行文有些长,新手边看边操作效果出乎你的预料。GitHub虽然有些许改版,但并无大碍。

46220
来自专栏杨龙飞前端

git的常用命令 查看远程仓库删除远程仓库

1.4K50
来自专栏python3

SourceTree 提交代码以及合并

SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端管理工具。SourceTree拥有一个精美简洁的界面,大大简化了...

35020
来自专栏电光石火

IDEA的svn

安装客户端 http://ncu.dl.sourceforge.net/project/tortoisesvn/1.8.7/Application/T...

29290
来自专栏电光石火

IDEA的svn

http://ncu.dl.sourceforge.net/project/tortoisesvn/1.8.7/Application/TortoiseSVN-...

226100
来自专栏后端技术探索

推荐!手把手教你用 Git

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自...

6220
来自专栏互扯程序

想要学Git,这一篇就够了

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

11430

扫码关注云+社区

领取腾讯云代金券