4
4
在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。
5
5
完成这个任务最简单而又有效的工具是 `git log` 命令。
6
6
7
- 接下来的例子会用我专门用于演示的 simplegit 项目,
8
- 运行下面的命令获取该项目源代码 :
7
+ 我们使用一个非常简单的 `` simplegit'' 项目作为示例。
8
+ 运行下面的命令获取该项目 :
9
9
10
10
[source,console]
11
11
----
12
- git clone https://github.com/schacon/simplegit-progit
12
+ $ git clone https://github.com/schacon/simplegit-progit
13
13
----
14
14
15
- 然后在此项目中运行 git log,应该会看到下面的输出 :(((git commands, log)))
15
+ 当你在此项目中运行 ` git log` 命令时,可以看到下面的输出 :(((git commands, log)))
16
16
17
17
[source,console]
18
18
----
@@ -36,14 +36,14 @@ Date: Sat Mar 15 10:31:28 2008 -0700
36
36
first commit
37
37
----
38
38
39
- 默认不用任何参数的话 ,`git log` 会按提交时间列出所有的更新 ,最近的更新排在最上面。
39
+ 不传入任何参数的默认情况下 ,`git log` 会按时间先后顺序列出所有的提交 ,最近的更新排在最上面。
40
40
正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。
41
41
42
42
`git log` 有许多选项可以帮助你搜寻你所要找的提交,
43
- 接下来我们介绍些最常用的 。
43
+ 下面我们会介绍几个最常用的选项 。
44
44
45
- 一个常用的选项是 `-p`,用来显示每次提交的内容差异 。
46
- 你也可以加上 `-2` 来仅显示最近两次提交 :
45
+ 其中一个比较有用的选项是 `-p`,它会显示每次提交所引入的差异 。
46
+ 与此同时,你也可以使用 `-2` 选项来仅显示最近的两次提交 :
47
47
48
48
[source,console]
49
49
----
@@ -93,7 +93,7 @@ index a0a60ae..47c6340 100644
93
93
该选项除了显示基本信息之外,还附带了每次 commit 的变化。
94
94
当进行代码审查,或者快速浏览某个搭档提交的 commit 所带来的变化的时候,这个参数就非常有用了。
95
95
你也可以为 `git log` 附带一系列的总结性选项。
96
- 比如说,如果你想看到每次提交的简略的统计信息,你可以使用 `--stat` 选项:
96
+ 比如你想看到每次提交的简略统计信息,可以使用 `--stat` 选项:
97
97
98
98
[source,console]
99
99
----
@@ -131,11 +131,11 @@ Date: Sat Mar 15 10:31:28 2008 -0700
131
131
正如你所看到的,`--stat` 选项在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。
132
132
在每次提交的最后还有一个总结。
133
133
134
- 另外一个常用的选项是 `--pretty`。
135
- 这个选项可以指定使用不同于默认格式的方式展示提交历史 。
134
+ 另一个非常有用的选项是 `--pretty`。
135
+ 这个选项可以使用不同于默认格式的方式展示提交历史 。
136
136
这个选项有一些内建的子选项供你使用。
137
- 比如用 `oneline` 将每个提交放在一行显示,查看的提交数很大时非常有用 。
138
- 另外还有 `short`,`full` 和 `fuller` 可以用,展示的信息或多或少有些不同,请自己动手实践一下看看效果如何。
137
+ 比如 `oneline` 会将每个提交放在一行显示,在浏览大量的提交时非常有用 。
138
+ 另外还有 `short`,`full` 和 `fuller` 选项,它们展示信息的格式基本一致,但是详尽程度不一:
139
139
140
140
[source,console]
141
141
----
@@ -163,20 +163,20 @@ a11bef0 - Scott Chacon, 6 years ago : first commit
163
163
[cols="1,4",options="header"]
164
164
|================================
165
165
| 选项 | 说明
166
- | `%H` | 提交对象(commit)的完整哈希字串
167
- | `%h` | 提交对象的简短哈希字串
168
- | `%T` | 树对象(tree)的完整哈希字串
169
- | `%t` | 树对象的简短哈希字串
170
- | `%P` | 父对象(parent)的完整哈希字串
171
- | `%p` | 父对象的简短哈希字串
172
- | `%an` | 作者(author)的名字
166
+ | `%H` | 提交的完整哈希值
167
+ | `%h` | 提交的简写哈希值
168
+ | `%T` | 树的完整哈希值
169
+ | `%t` | 树的简写哈希值
170
+ | `%P` | 父提交的完整哈希值
171
+ | `%p` | 父提交的简写哈希值
172
+ | `%an` | 作者名字
173
173
| `%ae` | 作者的电子邮件地址
174
174
| `%ad` | 作者修订日期(可以用 --date= 选项定制格式)
175
175
| `%ar` | 作者修订日期,按多久以前的方式显示
176
176
| `%cn` | 提交者(committer)的名字
177
177
| `%ce` | 提交者的电子邮件地址
178
178
| `%cd` | 提交日期
179
- | `%cr` | 提交日期,按多久以前的方式显示
179
+ | `%cr` | 提交日期(相对)
180
180
| `%s` | 提交说明
181
181
|================================
182
182
@@ -213,40 +213,40 @@ $ git log --pretty=format:"%h %s" --graph
213
213
[cols="1,4",options="header"]
214
214
|================================
215
215
| 选项 | 说明
216
- | `-p` | 按补丁格式显示每个更新之间的差异 。
217
- | `--stat` | 显示每次更新的文件修改统计信息 。
216
+ | `-p` | 按补丁格式显示每个提交引入的差异 。
217
+ | `--stat` | 显示每次提交的文件修改统计信息 。
218
218
| `--shortstat` | 只显示 --stat 中最后的行数修改添加移除统计。
219
219
| `--name-only` | 仅在提交信息后显示已修改的文件清单。
220
220
| `--name-status` | 显示新增、修改、删除的文件清单。
221
- | `--abbrev-commit` | 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符 。
222
- | `--relative-date` | 使用较短的相对时间显示 (比如,“ 2 weeks ago” )。
223
- | `--graph` | 显示 ASCII 图形表示的分支合并历史 。
224
- | `--pretty` | 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式 )。
221
+ | `--abbrev-commit` | 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符 。
222
+ | `--relative-date` | 使用较短的相对时间而不是完整格式显示日期 (比如,`` 2 weeks ago'' )。
223
+ | `--graph` | 在日志旁以 ASCII 图形显示分支与合并历史 。
224
+ | `--pretty` | 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(用来定义自己的格式 )。
225
225
|================================
226
226
227
227
==== 限制输出长度
228
228
229
- 除了定制输出格式的选项之外,`git log` 还有许多非常实用的限制输出长度的选项,也就是只输出部分提交信息 。
230
- 之前你已经看到过 `-2` 了,它只显示最近的两条提交 ,
231
- 实际上,这是 `-<n>` 选项的写法 ,其中的 `n` 可以是任何整数,表示仅显示最近的若干条提交 。
232
- 不过实践中我们是不太用这个选项的, Git 在输出所有提交时会自动调用分页程序 ,所以你一次只会看到一页的内容。
229
+ 除了定制输出格式的选项之外,`git log` 还有许多非常实用的限制输出长度的选项,也就是只输出一部分的提交 。
230
+ 之前你已经看到过 `-2` 选项了,它只会显示最近的两条提交 ,
231
+ 实际上,你可以使用类似 `-<n>` 的选项 ,其中的 `n` 可以是任何整数,表示仅显示最近的 `n` 条提交 。
232
+ 不过实践中这个选项不是很常用,因为 Git 默认会将所有的输出传送到分页程序中 ,所以你一次只会看到一页的内容。
233
233
234
- 另外还有按照时间作限制的选项,比如 `--since` 和 `--until` 也很有用 。
235
- 例如,下面的命令列出所有最近两周内的提交 :
234
+ 但是,类似 `--since` 和 `--until` 这种按照时间作限制的选项很有用 。
235
+ 例如,下面的命令会列出最近两周的所有提交 :
236
236
237
237
[source,console]
238
238
----
239
239
$ git log --since=2.weeks
240
240
----
241
241
242
- 这个命令可以在多种格式下工作,比如说具体的某一天 `"2008-01-15"`,或者是相对地多久以前 `"2 years 1 day 3 minutes ago"`。
242
+ 该命令可用的格式十分丰富——可以是类似 `"2008-01-15"` 的具体的某一天,也可以是类似 `"2 years 1 day 3 minutes ago"` 的相对日期 。
243
243
244
- 还可以给出若干搜索条件,列出符合的提交 。
244
+ 还可以过滤出匹配指定条件的提交 。
245
245
用 `--author` 选项显示指定作者的提交,用 `--grep` 选项搜索提交说明中的关键字。
246
- (请注意,如果要得到同时满足这两个选项搜索条件的提交,就必须用 `--all-match` 选项。否则,满足任意一个条件的提交都会被匹配出来 )
246
+ (请注意,如果你要同时对作者和提交说明进行过滤,就必须添加 `--all-match` 选项,否则该命令将会匹配满足其中任意一个条件的提交 )
247
247
248
- 另一个非常有用的筛选选项是 `-S`,可以列出那些添加或移除了某些字符串的提交 。
249
- 比如说,你想找出添加或移除了某一个特定函数的引用的提交,你可以这样使用 :
248
+ 另一个非常有用的过滤器是 `-S`,它接受一个字符串参数,并且只会显示那些添加或删除了该字符串的提交 。
249
+ 假设你想找出添加或删除了对某一个特定函数的引用的提交,可以调用 :
250
250
251
251
[source,console]
252
252
----
@@ -267,13 +267,13 @@ $ git log -Sfunction_name
267
267
| `-(n)` | 仅显示最近的 n 条提交
268
268
| `--since`, `--after` | 仅显示指定时间之后的提交。
269
269
| `--until`, `--before` | 仅显示指定时间之前的提交。
270
- | `--author` | 仅显示指定作者相关的提交 。
271
- | `--committer` | 仅显示指定提交者相关的提交 。
272
- | `--grep` | 仅显示含指定关键字的提交
273
- | `-S` | 仅显示添加或移除了某个关键字的提交
270
+ | `--author` | 仅显示作者匹配指定字符串的提交 。
271
+ | `--committer` | 仅显示提交者匹配指定字符串的提交 。
272
+ | `--grep` | 仅显示提交说明中包含指定字符串的提交
273
+ | `-S` | 仅显示添加或删除内容匹配指定字符串的提交
274
274
|================================
275
275
276
- 来看一个实际的例子,如果要查看 Git 仓库中, 2008 年 10 月期间, Junio Hamano 提交的但未合并的测试文件,可以用下面的查询命令: (((log filtering)))
276
+ 来看一个实际的例子,如果要查看 2008 年 10 月期间 Git 源代码仓库中,由 Junio Hamano 提交的修改了测试文件并且尚未合并的提交,可以使用下面的命令: (((log filtering)))
277
277
278
278
[source,console]
279
279
----
0 commit comments