三、git的具体操作
基本操作 git init——初始化仓库 要使用 Git 进行版本管理,必须先初始化仓库。Git
基本操作
- git init——初始化仓库
要使用 Git 进行版本管理,必须先初始化仓库。Git 是使用 git init 命令进行初始化的。
$ mkdir git-tutorial
$ cd git-tutorial
$ git init
Initialized empty Git repository in /Users/hirocaster/github/github-book
/git-tutorial/.git/
如果初始化成功,执行了 git init命令的目录下就会生成 .git 目录。
这个 .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 分支下。同时还会显示当前没有提交的内容。
当前尚没有可提交的内容,就是说当前我们建立的这个仓库中还没有记录任何文件的任何状态。
现在建立 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 -m "First commit"
[master (root-commit) 9f129ba] First commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
-m 参数后的 "First commit"称作提交信息,是对这个提交的概述。
- 记述详细提交信息
刚才只简洁地记述了一行提交信息,如果想要记述得更加详细,请不加 - m,直接执行 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:
# (use "git rm --cached <file>..." to unstage)
#
# 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 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:06:49 2013 +0900
First commit
如上图所示,屏幕显示了刚刚的提交操作。
commit 栏旁边显示的 “9f129b……” 是指向这个提交的哈希值。Git 的其他命令中,在指向提交时会用到这个哈希值。
Author 栏中显示我们给 Git 设置的用户名和邮箱地址。
Date 栏中显示提交执行的日期和时间。
再往下就是该提交的提交信息。
- 只显示提交信息的第一行
如果只想让程序显示第一行简述信息,可以在 git log 命令后加上 --pretty=short。
这样一来开发人员就能够更轻松地把握多个提交。
$ git log --pretty=short
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
First commit
- 只显示指定目录、文件的日志
只要在 git log 命令后加上目录名,便会只显示该目录下的日志。
如果加的是文件名,就会只显示与该文件相关的日志。
$ git log README.md
- 显示文件的改动
如果想查看提交所带来的改动,可以加上 - p 参数,文件的前后差别就会显示在提交信息之后。
$ git log -p
比如,执行下面的命令,就可以只查看 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..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# 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..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git教程
不妨养成这样一个好习惯:在执行 git commit命令之前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等确认完毕后再进行提交。
这里的 HEAD 是指向当前分支中最新一次提交的指针。
由于我们刚刚确认过两个提交之间的差别,所以直接运行 git commit命令。
$ git commit -m "Add index"
[master fd0cbf0] Add index
1 file changed, 1 insertion(+)
保险起见,我们查看一下提交日志,确认提交是否成功。
$ git log
commit fd0cbf0d4a25f747230694d95cac1be72d33441d
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:10:15 2013 +0900
Add index
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:06:49 2013 +0900
First commit
成功查到了第二个提交。