Git基本操作总结

无主题博客 » Git » Git基本操作总结

关于 Git 环境,在最近的 Mac 中都预装了 Git。而各版本的 Linux 中也都以软件包的形式提供给用户了,所以在这两个系统环境下,大家可以直接使用;关于Windows下的 Git 环境,之前写了一篇文章介绍在windows下如何安装git环境 windows安装git和环境变量配置,这里就不在阐述了,本文主要总结一下 Git 的基本操作。

注:本文操作均在 Mac OSX 系统下进行。

git init —- 初始化仓库

要使用 Git 进行版本管理,必须先初始化仓库。Git 是使用 git init 命令进行初始化的。

$ mkdir git-example
$ cd git-example
$ git init
Initialized empty Git repository in /Users/Frank/git-example/.git/

如果初始化成功,执行了 git init 命令的目录下就会生成 .git 目录。这个目录里存储着管理当前目录内容所需的仓库数据。

在 Git 中,我们将这个目录的内容成为“附属于改仓库的工作树”。文件的编辑等操作在工作树中进行,然后记录到仓库中,以此管理文件的历史快照。如果想将文件恢复到原始状态,可以从仓库中调取之前的快照,在工作树中打开。开发者可通过这种方式获取以往的文件。具体操作指令将在后面详细解说。

git status —- 查看仓库的状态

git status 命令用于显示Git仓库的状态。这是一个十分常用的命令,请务必牢记。

工作树和仓库在被操作的过程中,状态会不断发生变化。在 Git操作过程中时常用 git status 命令查看当前状态,可谓基本中的基本。下面,就让我们来实际查看一下当前状态。

$ git status
On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

结果显示了我们当前正处于 master 分支下。接着还显示了没有可提交的内容。所谓提交(Commit),是指“记录工作树中所有文件的当前状态”。

尚没有可提交的内容,就是说当前我们创建的这个仓库中还没有记录任何状态。这里我们建立 README.md 文件作为管理对象,为第一次提交做前期准备。

$ touch README.md
$ git status
On branch master

Initial commit

Untracked files:
 (use "git add <file>..." to include in what will be committed)

 README.md

nothing added to commit but untracked files present (use "git add" to track)

可以看到在 Untracked files 中显示了 README.md 文件。类似地,只要对 Git 的工作树活仓库进行操作,git status 命令的显示结果就会发生变化。

git add —- 向暂存区中添加文件

如果只是用 Git 仓库的工作树创建了文件,那么该文件并不会被记入 Git 仓库的版本管理对象中。因此我们用 git status 命令查看 README.md 文件时,他会显示 在 Untracked files 里。

要想让文件称为 Git 仓库的管理对象,就需要用 git add 命令将其加入暂存区(Stage 或者 Index)中。暂存区是提交之前的一个临时区域。

$ git add README.md
$ git status
On branch master

Initial commit

Changes to be committed:
 (use "git rm --cached <file>..." to unstage)

 new file: README.md

README.md 文件加入暂存区后,git status 命令的现实结果发生了变化。可以看到, README.md 文件显示在 Changes to be committed 中了。

git commit —- 保存仓库的历史记录

git commit 命令可以将当前暂存区中的文件实际保存到仓库的历史记录中。通过这些记录,我们就可以在工作树中复原文件。

描述一行提交信息

我们来实际运行一下 git commit 命令。

$ commit -m "First commit"
[master (root-commit) 537f4b0] First commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

-m 参数的 “First commit” 称作提交信息,是对这个提交的概述。

描述详细提交信息

刚才我们只简介地描述了一行提交信息,如果想要描述得更加详细,请不加 -m ,直接执行 git commit 命令。执行后编辑器就会启动,并显示如下结果。

$ git commit
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
#
# Initial commit
#
# Changes to be committed:
# new file: README.md
#

在编辑器中填写提交信息的格式如下。

  • 第一行:用一行文字简述提交的更改内容
  • 第二行:空行
  • 第三行以后:填写更改的原因和详细内容

只要安装上面的格式输入,今后便于可以通过确认日志的命令或工具看到这些记录。

在以 #(井号)标为注释的 Changes to be committed (要提交的更改)栏中,可以查看本次提交中包含的文件。将提交信息按格式描述完毕后,请保存并关闭编辑器,以 #(井号)标记为注释的行不必删除。随后,刚才描述的提交信息就会被提交。

终止提交

如果在编辑器启动后想终止提交,请将提交信息留空并直接关闭编辑器,随后提交就会被终止。

查看提交后的状态

执行完 git commit 命令后再来查看当前状态。

$ git status
On branch master
nothing to commit, working directory clean

当前工作树处于刚果完成提交的最新状态,所有结果显示没有更改。

git log —- 查看提交日志

git log 命令可以查看以往仓库中提交的日志。包括可以查看什么人在什么时候进行了提交和合并,以及操作前后有怎么样的差别。

我们先来看看刚才的 git commit 命令是否被纪录了。

$ git log
commit 537f4b017419693e0058795ad5618073181cce3d
Author: Frank <zhwuzhuo@gmail.com>
Date: Sat Apr 16 19:23:15 2016 +0800

 First commit

如上面的结果所示,显示了刚刚的提交操作。commit 栏旁边显示的“537f……”是指向这个提交的 Hash 值。Git 的其他命令中。在指向提交时会用到这个 Hash 值。Autor栏中显示我们给 Git 设置的用户名和邮箱地址。Date 栏中显示提交执行的日期和时间。再往下就是该提交的提交信息。

只显示提交信息的第一行

如果只想让程序显示第一行简述信息,可以在 git log 命令后加上 --pretty=short。这样一来开发人员就能够轻松地把握多个提交。

$ git log --pretty=short
commit 537f4b017419693e0058795ad5618073181cce3d
Author: Frank <zhwuzhuo@gmail.com>
Date: Sat Apr 16 19:23:15 2016 +0800

 First commit

只显示指定目录、文件的日志

只要在 git log 命令后加上目录名,便会只显示该目录下的日志。如果加的是文件名,就只显示与该文件相关的日志。

$ git log README.md

显示文件的改动

如果想查看提交带来的改动,可以加上 -p 参数,文件的前后差别就会显示在提交信息之后。

$ git log -p
commit 537f4b017419693e0058795ad5618073181cce3d
Author: Frank <zhwuzhuo@gmail.com>
Date: Sat Apr 16 19:23:15 2016 +0800

 First commit

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29

比如,执行下面的命令,就可以只查看 README.md 文件的提交日志以及提交前后的差别。

$ git log -p README.md

如上所示,git log 命令可以利用多种参数帮助开发者把握以往提交的内容。不必勉强自己一次记下全部参数,每当有想查看的日志就积极去查,慢慢就能得心应手了。

git diff —- 查看更改前后的差别

git diff 命令可以查看工作树、暂存区、最新提交之间的差别。单从文字上面可能很难理解,不妨自己亲自动手试一试。

我们在刚刚提交的 README.md 中写点东西。

# Git教程

这里用 Markdown 语法写下了一行题目,和一个本文超链接。

查看工作树和暂存区的差别

执行 git diff 命令,查看当前工作树与暂存区的差别。

$ git diff
diff --git a/README.md b/README.md
index e69de29..9f1afa7 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,2 @@
+# Git教程

由于我们尚未用 git add 命令向暂存区添加任何东西,所以程序只会显示工作树与最新提交状态之间的差别。

这里理解一下显示的内容。“+” 号标出的是新添加的行,被删除的行使用“-”号标出,我们可以看到,这次只新增了一行。

git add 命令将修改后的 README.md 文件加入暂存区。

$ git add README.md

查看工作树和最新提交的差别

如果现在执行 git diff 命令,由于工作树和暂存区的状态并无差别,结果什么都不会显示。要查看与最新的提交差别,请执行一下命令。

$ git diff HEAD
diff --git a/README.md b/README.md
index e69de29..9f1afa7 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,2 @@
+# Git教程

不妨养成这样一个习惯:在执行 git commit 命令之前先执行 git diff HEAD 命令,查看本次提交与上次提交之间有什么差别,等确认完毕后在执行提交。这里的 HEAD 是指向当前分支中最新一次提交的指针。

由于我们刚刚确认过两个提交之间的差别,所以直接运行 git commit 命令。

$ git commit -M "Add index"
[master aad35dc] Add index
 1 file changed, 2 insertions(+)

保险起见,我们查看一下提交日志,确认提交是否成功。

$ git log
commit aad35dcde79bb3011ceade7e3346a7b8880870ca
Author: Frank <zhwuzhuo@gmail.com>
Date: Sun Apr 17 18:39:11 2016 +0800

 Add index

commit 537f4b017419693e0058795ad5618073181cce3d
Author: Frank <zhwuzhuo@gmail.com>
Date: Sat Apr 16 19:23:15 2016 +0800

 First commit

成功查到了第二个提交。


文章内容参考:《GitHub入门与实践》

《Git基本操作总结》有2个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注