## 教程 - 檢查倉庫歷史
現在我們已經參照 [教程 - 克隆倉庫](/wiki/ChineseTutorialClone) 克隆了一個 [倉庫](/wiki/Repository); 我們倉庫的本地拷貝叫 `my-hello`.
讓我們看一看這個倉庫的歷史記錄。我們用 `log` 命令來做這個事情。這個命令按時間順序從近到遠輸出在[倉庫](/wiki/Repository)中發生的每一個事件。
```
$ cd my-hello
$ hg log
changeset: 1:82e55d328c8c
tag: tip
user: mpm@selenic.com
date: Fri Aug 26 01:21:28 2005 -0700
summary: Create a makefile
changeset: 0:0a04b987be5a
user: mpm@selenic.com
date: Fri Aug 26 01:20:50 2005 -0700
summary: Create a standard "hello, world" program
```
這些輸出行的含義是這樣的。
* 每一段描述一個特定的改變集。一個或幾個文件的改變集合在一起形成一個邏輯單元,稱為改變集。
* 在上面的例子中,我們可以看到該[倉庫](/wiki/Repository) 的歷史包括了兩個[改變集](/wiki/ChangeSet)。
* `changeset` 標識了一個 [改變集](/wiki/ChangeSet).
* 冒號前面的數字代表版本號; 它是一種標識[改變集](/wiki/ChangeSet)的本地縮寫.只是在你的本地[倉庫](/wiki/Repository)中這個版本號才有意義.
* 冒號后面的那個很長的十六進制串是 ChangeSetID; 它是標識[改變集](/wiki/ChangeSet)的全局唯一標識符, 在所有包含這個[改變集](/wiki/ChangeSet)的[倉庫](/wiki/Repository)中都相同. 如果你正在和其他人討論某個改變集,請使用這個 ChangeSetID,而不是上面說的版本號.
* `tag` 是一個[標簽](/wiki/Tag),可以理解成為一個改變集指定的名字.
* 你可以給任何改變集指定一個或者多個[標簽](/wiki/Tag). 實際上, 許多[改變集](/wiki/ChangeSet)都是沒有[標簽](/wiki/Tag)的, 所以`tag`這一行很多時候都不存在.
* 名叫`tip` 的特殊[標簽](/wiki/Tag)總是表示,它是[倉庫](/wiki/Repository)中最后一個[改變集](/wiki/ChangeSet)。 如果你創建另外的[改變集](/wiki/ChangeSet)(一會我們會看到),那么它將會變成 [Tip](/wiki/Tip)。
* `user` 確定了誰創建了本[改變集](/wiki/ChangeSet)。這是一個無格式的字符串; 它通常包括電子郵件地址,個人姓名等。
* `date` 描述了[改變集](/wiki/ChangeSet)是什么時候創建的。這些時間是創建[改變集](/wiki/ChangeSet)的人所在區域的當地時間。
* `summary` 給出了[改變集](/wiki/ChangeSet)描述的首行。它是在創建[改變集](/wiki/ChangeSet)時進入的,它可以幫助創建者和其它人了解[改變集](/wiki/ChangeSet)的目的。
* `parent` 標志了[改變集](/wiki/ChangeSet)的父輩,當你從幾個倉庫合并而來的情況下,父輩有多個。
* 大多數情況只有一個父輩,它比目前的改變集舊。這是在我們例子中使用的。
我們可以通過指定`-v`診斷輸出選項來獲得更多更詳細的歷史信息, 或者指定`--debug`選項來獲得歷史信息中的一切細節:
```
$ hg log -v
changeset: 1:82e55d328c8ca4ee16520036c0aaace03a5beb65
tag: tip
user: mpm@selenic.com
date: Fri Aug 26 01:21:28 2005 -0700
files: Makefile
description:
Create a makefile
(...)
$ hg log --debug
manifest: 1:0c7c1d435e6703e03ac6634a7c32da3a082d1600
changeset: 1:82e55d328c8ca4ee16520036c0aaace03a5beb65
tag: tip
parent: 0:0a04b987be5ae354b710cefeba0e2d9de7ad41a9
parent: -1:0000000000000000000000000000000000000000
user: mpm@selenic.com
date: Fri Aug 26 01:21:28 2005 -0700
files+: Makefile
description:
Create a makefile
(...)
```
-v的輸出比缺省輸出要多。
* `changeset` 給出不縮略的[改變集標號](/wiki/ChangeSetID)。
* `files` 列出在本[改變集](/wiki/ChangeSet)中文件的改變。
* `description` 包含了[改變集](/wiki/ChangeSet)的完整多行描述而不僅是頭一行。
* 在我們例子中,描述都只有一行,所以沒什么特別不同的地方。
--debug 給謂詞輸出添加了以下方面:
* `file+` 列出了在此改變集中增加的文件。
* `file-` 列出了在此改變集中刪除的文件。
* `manifest` 給這個改變集一個 [Manifest](/wiki/Manifest) 號。
* 兩個 `parent` 域給這個改變集的兩個父輩號碼, `-1:0000000000000000000000000000000000000000` 表示沒有父改變集。
`log` 命令與 `-r` 選項一起使用可以查看特定改變集。
```
$ hg log -r1
changeset: 1:82e55d328c8c
tag: tip
user: mpm@selenic.com
date: Fri Aug 26 01:21:28 2005 -0700
summary: Create a makefile
```
 The `-r` 選項實際上支持一種非常靈活的語法來選擇改變集的范圍。但是由于在我們例子的倉庫里的改變集很有限,我們不能做很好的示范。你可以看 Mercurial 的 [manpage](http://www.selenic.com/mercurial/hg.1.html) 來得到更多的信息。
`log` 命令與 `-p` 選項一起可以顯示和此改變集相關聯的補丁。
```
$ hg log -r1 -p
changeset: 1:82e55d328c8c
tag: tip
user: mpm@selenic.com
date: Fri Aug 26 01:21:28 2005 -0700
summary: Create a makefile
diff -r 0a04b987be5a -r 82e55d328c8c Makefile
--- /dev/null Fri Aug 26 01:20:50 2005 -0700
+++ b/Makefile Fri Aug 26 01:21:28 2005 -0700
@@ -0,0 +1,1 @@
+all: hello
```
我們也可以使用 `tip` 命令來顯示 _tip_ 的信息,如最后的改變集。 `tip` 命令除了不支持 `-p` 選項外,它可以當做 `log?-r?tip` 的快捷方式,
```
$ hg tip
changeset: 1:82e55d328c8c
tag: tip
user: mpm@selenic.com
date: Fri Aug 26 01:21:28 2005 -0700
summary: Create a makefile
$ hg log -r tip
changeset: 1:82e55d328c8c
tag: tip
user: mpm@selenic.com
date: Fri Aug 26 01:21:28 2005 -0700
summary: Create a makefile
```
現在我們對發生了什么有了一點概念,現在讓我們進入并做一些修改吧!進入 [教程 - 生成第一個[變更](/wiki/ChineseTutorialFirstChange)]!