14
14
[source,console]
15
15
----
16
16
$ git add README test.rb LICENSE
17
- $ git commit -m 'initial commit of my project'
17
+ $ git commit -m 'The initial commit of my project'
18
18
----
19
19
20
20
当使用 `git commit` 进行提交操作时,Git 会先计算每一个子目录(本例中只有项目根目录)的校验和,然后在 Git 仓库中这些校验和保存为树对象。
@@ -30,10 +30,9 @@ image::images/commit-and-tree.png[首次提交对象及其树结构.]
30
30
.提交对象及其父对象
31
31
image::images/commits-and-parents.png[提交对象及其父对象.]
32
32
33
- 说完了 Git 保存数据的方式,现在让我们谈回分支。
34
33
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。
35
34
Git 的默认分支名字是 `master`。
36
- 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。
35
+ 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 ` master` 分支。
37
36
它会在每次的提交操作中自动向前移动。
38
37
39
38
[NOTE]
@@ -52,7 +51,8 @@ image::images/branch-and-history.png[分支及其提交历史.]
52
51
(((branches, creating)))
53
52
Git 是怎么创建新分支的呢?
54
53
很简单,它只是为你创建了一个可以移动的新的指针。
55
- 比如,创建一个 testing 分支,需要使用 `git branch` 命令:(((git commands, branch)))
54
+ 比如,创建一个 testing 分支,
55
+ 你需要使用 `git branch` 命令:(((git commands, branch)))
56
56
57
57
[source,console]
58
58
----
@@ -62,19 +62,20 @@ $ git branch testing
62
62
这会在当前所在的提交对象上创建一个指针。
63
63
64
64
.两个指向相同提交历史的分支
65
- image::images/two-branches.png[两个指向相同提交历史的分支. ]
65
+ image::images/two-branches.png[两个指向相同提交历史的分支。 ]
66
66
67
67
那么,Git 又是怎么知道当前在哪一个分支上呢?
68
68
也很简单,它有一个名为 `HEAD` 的特殊指针。
69
69
请注意它和许多其它版本控制系统(如 Subversion 或 CVS)里的 `HEAD` 概念完全不同。
70
70
在 Git 中,它是一个指针,指向当前所在的本地分支(译注:将 `HEAD` 想象为当前分支的别名)。
71
- 在本例中,你仍然在 master 分支上。
71
+ 在本例中,你仍然在 ` master` 分支上。
72
72
因为 `git branch` 命令仅仅 _创建_ 一个新分支,并不会自动切换到新分支中去。
73
73
74
74
.HEAD 指向当前所在的分支
75
75
image::images/head-to-master.png[HEAD 指向当前所在的分支.]
76
76
77
- 你可以简单地使用 `git log` 命令查看各个分支当前所指的对象。提供这一功能的参数是 `--decorate`。
77
+ 你可以简单地使用 `git log` 命令查看各个分支当前所指的对象。
78
+ 提供这一功能的参数是 `--decorate`。
78
79
79
80
[source,console]
80
81
----
@@ -91,7 +92,7 @@ f30ab (HEAD, master, testing) add feature #32 - ability to add new
91
92
92
93
(((branches, switching)))
93
94
要切换到一个已存在的分支,你需要使用 `git checkout` 命令。(((git commands, checkout)))
94
- 我们现在切换到新创建的 testing 分支去:
95
+ 我们现在切换到新创建的 ` testing` 分支去:
95
96
96
97
[source,console]
97
98
----
@@ -115,8 +116,8 @@ $ git commit -a -m 'made a change'
115
116
.HEAD 分支随着提交操作自动向前移动
116
117
image::images/advance-testing.png[HEAD 分支随着提交操作自动向前移动.]
117
118
118
- 如图所示,你的 testing 分支向前移动了,但是 master 分支却没有,它仍然指向运行 `git checkout` 时所指的对象。
119
- 这就有意思了,现在我们切换回 master 分支看看:
119
+ 如图所示,你的 ` testing` 分支向前移动了,但是 ` master` 分支却没有,它仍然指向运行 `git checkout` 时所指的对象。
120
+ 这就有意思了,现在我们切换回 ` master` 分支看看:
120
121
121
122
[source,console]
122
123
----
@@ -127,9 +128,9 @@ $ git checkout master
127
128
image::images/checkout-master.png[检出时 HEAD 随之移动.]
128
129
129
130
这条命令做了两件事。
130
- 一是使 HEAD 指回 master 分支,二是将工作目录恢复成 master 分支所指向的快照内容。
131
+ 一是使 HEAD 指回 ` master` 分支,二是将工作目录恢复成 ` master` 分支所指向的快照内容。
131
132
也就是说,你现在做修改的话,项目将始于一个较旧的版本。
132
- 本质上来讲,这就是忽略 testing 分支所做的修改,以便于向另一个方向进行开发。
133
+ 本质上来讲,这就是忽略 ` testing` 分支所做的修改,以便于向另一个方向进行开发。
133
134
134
135
[NOTE]
135
136
.分支切换会改变你工作目录中的文件
0 commit comments