Skip to content

Commit d3a9d9b

Browse files
committed
Review 03-git-branching nutshell
1 parent 9d8a9d0 commit d3a9d9b

1 file changed

Lines changed: 11 additions & 11 deletions

File tree

book/03-git-branching/sections/nutshell.asc

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
在进行提交操作时,Git 会保存一个提交对象(commit object)。知道了 Git 保存数据的方式,我们可以很自然的想到——该提交对象会包含一个指向暂存内容快照的指针。
99
但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象,
1010

11-
为了说得更加形象,我们假设现在有一个工作目录,里面包含了三个将要被暂存和提交的文件。
11+
为了更加形象地说明,我们假设现在有一个工作目录,里面包含了三个将要被暂存和提交的文件。
1212
暂存操作会为每一个文件计算校验和(使用我们在 <<_getting_started>> 中提到的 SHA-1 哈希算法),然后会把当前版本的文件快照保存到 Git 仓库中(Git 使用 blob 对象来保存它们),最终将校验和加入到暂存区域等待提交:
1313

1414
[source,console]
@@ -23,12 +23,12 @@ $ git commit -m 'The initial commit of my project'
2323
现在,Git 仓库中有五个对象:三个 blob 对象(保存着文件快照)、一个树对象(记录着目录结构和 blob 对象索引)以及一个提交对象(包含着指向前述树对象的指针和所有提交信息)。
2424

2525
.首次提交对象及其树结构
26-
image::images/commit-and-tree.png[首次提交对象及其树结构.]
26+
image::images/commit-and-tree.png[首次提交对象及其树结构]
2727

2828
做些修改后再次提交,那么这次产生的提交对象会包含一个指向上次提交对象(父对象)的指针。
2929

3030
.提交对象及其父对象
31-
image::images/commits-and-parents.png[提交对象及其父对象.]
31+
image::images/commits-and-parents.png[提交对象及其父对象]
3232

3333
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。
3434
Git 的默认分支名字是 `master`。
@@ -43,7 +43,7 @@ Git 的 ``master'' 分支并不是一个特殊分支。(((master)))
4343
====
4444

4545
.分支及其提交历史
46-
image::images/branch-and-history.png[分支及其提交历史.]
46+
image::images/branch-and-history.png[分支及其提交历史]
4747

4848
[[_create_new_branch]]
4949
==== 分支创建
@@ -72,7 +72,7 @@ image::images/two-branches.png[两个指向相同提交历史的分支。]
7272
因为 `git branch` 命令仅仅 _创建_ 一个新分支,并不会自动切换到新分支中去。
7373

7474
.HEAD 指向当前所在的分支
75-
image::images/head-to-master.png[HEAD 指向当前所在的分支.]
75+
image::images/head-to-master.png[HEAD 指向当前所在的分支]
7676

7777
你可以简单地使用 `git log` 命令查看各个分支当前所指的对象。
7878
提供这一功能的参数是 `--decorate`。
@@ -102,7 +102,7 @@ $ git checkout testing
102102
这样 `HEAD` 就指向 `testing` 分支了。
103103

104104
.HEAD 指向当前所在的分支
105-
image::images/head-to-testing.png[HEAD 指向当前所在的分支.]
105+
image::images/head-to-testing.png[HEAD 指向当前所在的分支]
106106

107107
那么,这样的实现方式会给我们带来什么好处呢?
108108
现在不妨再提交一次:
@@ -114,7 +114,7 @@ $ git commit -a -m 'made a change'
114114
----
115115

116116
.HEAD 分支随着提交操作自动向前移动
117-
image::images/advance-testing.png[HEAD 分支随着提交操作自动向前移动.]
117+
image::images/advance-testing.png[HEAD 分支随着提交操作自动向前移动]
118118

119119
如图所示,你的 `testing` 分支向前移动了,但是 `master` 分支却没有,它仍然指向运行 `git checkout` 时所指的对象。
120120
这就有意思了,现在我们切换回 `master` 分支看看:
@@ -125,7 +125,7 @@ $ git checkout master
125125
----
126126

127127
.检出时 HEAD 随之移动
128-
image::images/checkout-master.png[检出时 HEAD 随之移动.]
128+
image::images/checkout-master.png[检出时 HEAD 随之移动]
129129

130130
这条命令做了两件事。
131131
一是使 HEAD 指回 `master` 分支,二是将工作目录恢复成 `master` 分支所指向的快照内容。
@@ -155,7 +155,7 @@ $ git commit -a -m 'made other changes'
155155

156156
[[divergent_history]]
157157
.项目分叉历史
158-
image::images/advance-master.png[项目分叉历史.]
158+
image::images/advance-master.png[项目分叉历史]
159159

160160
你可以简单地使用 `git log` 命令查看分叉历史。
161161
运行 `git log --oneline --decorate --graph --all` ,它会输出你的提交历史、各个分支的指向以及项目的分支分叉情况。
@@ -172,11 +172,11 @@ $ git log --oneline --decorate --graph --all
172172
----
173173

174174
由于 Git 的分支实质上仅是包含所指对象校验和(长度为 40 的 SHA-1 值字符串)的文件,所以它的创建和销毁都异常高效。
175-
创建一个新分支就像是往一个文件中写入 41 个字节(40 个字符和 1 个换行符),如此的简单能不快吗?
175+
创建一个新分支就相当于往一个文件中写入 41 个字节(40 个字符和 1 个换行符),如此的简单能不快吗?
176176

177177
这与过去大多数版本控制系统形成了鲜明的对比,它们在创建分支时,将所有的项目文件都复制一遍,并保存到一个特定的目录。
178178
完成这样繁琐的过程通常需要好几秒钟,有时甚至需要好几分钟。所需时间的长短,完全取决于项目的规模。而在 Git 中,任何规模的项目都能在瞬间创建新分支。
179179
同时,由于每次提交都会记录父对象,所以寻找恰当的合并基础(译注:即共同祖先)也是同样的简单和高效。
180180
这些高效的特性使得 Git 鼓励开发人员频繁地创建和使用分支。
181181

182-
接下来,让我们看看为什么你应该这么做?
182+
接下来,让我们看看你为什么应该这样做。

0 commit comments

Comments
 (0)