<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://jiva.dila.edu.tw/index.php?action=history&amp;feed=atom&amp;title=Pro_Git_2.3_%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E6%AD%B7%E5%8F%B2</id>
	<title>Pro Git 2.3 查看提交歷史 - 修訂歷史</title>
	<link rel="self" type="application/atom+xml" href="https://jiva.dila.edu.tw/index.php?action=history&amp;feed=atom&amp;title=Pro_Git_2.3_%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E6%AD%B7%E5%8F%B2"/>
	<link rel="alternate" type="text/html" href="https://jiva.dila.edu.tw/index.php?title=Pro_Git_2.3_%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E6%AD%B7%E5%8F%B2&amp;action=history"/>
	<updated>2026-05-05T18:13:42Z</updated>
	<subtitle>本 Wiki 上此頁面的修訂歷史</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://jiva.dila.edu.tw/index.php?title=Pro_Git_2.3_%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E6%AD%B7%E5%8F%B2&amp;diff=525&amp;oldid=prev</id>
		<title>imported&gt;Ray：​新頁面: 在提交了若干更新之後，又或者克隆了某個專案，想回顧下提交歷史，可以使用 git log 命令。  接下來的例子會用我專門用於展示的 simplegit 專...</title>
		<link rel="alternate" type="text/html" href="https://jiva.dila.edu.tw/index.php?title=Pro_Git_2.3_%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E6%AD%B7%E5%8F%B2&amp;diff=525&amp;oldid=prev"/>
		<updated>2011-05-24T07:10:16Z</updated>

		<summary type="html">&lt;p&gt;新頁面: 在提交了若干更新之後，又或者克隆了某個專案，想回顧下提交歷史，可以使用 git log 命令。  接下來的例子會用我專門用於展示的 simplegit 專...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;在提交了若干更新之後，又或者克隆了某個專案，想回顧下提交歷史，可以使用 git log 命令。&lt;br /&gt;
&lt;br /&gt;
接下來的例子會用我專門用於展示的 simplegit 專案，執行下面的命令獲取該專案原始程式碼：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
git clone git://github.com/schacon/simplegit-progit.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然後在此專案中執行 git log，應該會看到下面的輸出：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git log&lt;br /&gt;
commit ca82a6dff817ec66f44342007202690a93763949&lt;br /&gt;
Author: Scott Chacon &amp;lt;schacon@gee-mail.com&amp;gt;&lt;br /&gt;
Date:   Mon Mar 17 21:52:11 2008 -0700&lt;br /&gt;
&lt;br /&gt;
    changed the verison number&lt;br /&gt;
&lt;br /&gt;
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7&lt;br /&gt;
Author: Scott Chacon &amp;lt;schacon@gee-mail.com&amp;gt;&lt;br /&gt;
Date:   Sat Mar 15 16:40:33 2008 -0700&lt;br /&gt;
&lt;br /&gt;
    removed unnecessary test code&lt;br /&gt;
&lt;br /&gt;
commit a11bef06a3f659402fe7563abf99ad00de2209e6&lt;br /&gt;
Author: Scott Chacon &amp;lt;schacon@gee-mail.com&amp;gt;&lt;br /&gt;
Date:   Sat Mar 15 10:31:28 2008 -0700&lt;br /&gt;
&lt;br /&gt;
    first commit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
預設不用任何參數的話，git log 會按提交時間列出所有的更新，最近的更新排在最上面。看到了嗎，每次更新都有一個 SHA-1 checksum、作者的名字和電子郵寄地址、提交時間，最後縮進一個段落顯示提交說明。&lt;br /&gt;
&lt;br /&gt;
git log 有許多選項可以説明你搜尋感興趣的提交，接下來我們介紹些最常用的。&lt;br /&gt;
&lt;br /&gt;
我們常用 -p 選項展開顯示每次提交的內容差異，用 -2 則僅顯示最近的兩次更新：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git log –p -2&lt;br /&gt;
commit ca82a6dff817ec66f44342007202690a93763949&lt;br /&gt;
Author: Scott Chacon &amp;lt;schacon@gee-mail.com&amp;gt;&lt;br /&gt;
Date:   Mon Mar 17 21:52:11 2008 -0700&lt;br /&gt;
&lt;br /&gt;
    changed the verison number&lt;br /&gt;
&lt;br /&gt;
diff --git a/Rakefile b/Rakefile&lt;br /&gt;
index a874b73..8f94139 100644&lt;br /&gt;
--- a/Rakefile&lt;br /&gt;
+++ b/Rakefile&lt;br /&gt;
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'&lt;br /&gt;
 spec = Gem::Specification.new do |s|&lt;br /&gt;
-    s.version   =   &amp;quot;0.1.0&amp;quot;&lt;br /&gt;
+    s.version   =   &amp;quot;0.1.1&amp;quot;&lt;br /&gt;
     s.author    =   &amp;quot;Scott Chacon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7&lt;br /&gt;
Author: Scott Chacon &amp;lt;schacon@gee-mail.com&amp;gt;&lt;br /&gt;
Date:   Sat Mar 15 16:40:33 2008 -0700&lt;br /&gt;
&lt;br /&gt;
    removed unnecessary test code&lt;br /&gt;
&lt;br /&gt;
diff --git a/lib/simplegit.rb b/lib/simplegit.rb&lt;br /&gt;
index a0a60ae..47c6340 100644&lt;br /&gt;
--- a/lib/simplegit.rb&lt;br /&gt;
+++ b/lib/simplegit.rb&lt;br /&gt;
@@ -18,8 +18,3 @@ class SimpleGit&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
-&lt;br /&gt;
-if $0 == __FILE__&lt;br /&gt;
-  git = SimpleGit.new&lt;br /&gt;
-  puts git.show&lt;br /&gt;
-end&lt;br /&gt;
\ No newline at end of file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在做代碼審查，或者要快速瀏覽其他協作者提交的更新都作了哪些改動時，就可以用這個選項。&amp;lt;br&amp;gt;&lt;br /&gt;
此外，還有許多摘要選項可以用，比如 --stat，僅顯示簡要的增改行數統計：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git log --stat &lt;br /&gt;
commit ca82a6dff817ec66f44342007202690a93763949&lt;br /&gt;
Author: Scott Chacon &amp;lt;schacon@gee-mail.com&amp;gt;&lt;br /&gt;
Date:   Mon Mar 17 21:52:11 2008 -0700&lt;br /&gt;
&lt;br /&gt;
    changed the verison number&lt;br /&gt;
&lt;br /&gt;
 Rakefile |    2 +-&lt;br /&gt;
 1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
&lt;br /&gt;
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7&lt;br /&gt;
Author: Scott Chacon &amp;lt;schacon@gee-mail.com&amp;gt;&lt;br /&gt;
Date:   Sat Mar 15 16:40:33 2008 -0700&lt;br /&gt;
&lt;br /&gt;
    removed unnecessary test code&lt;br /&gt;
&lt;br /&gt;
 lib/simplegit.rb |    5 -----&lt;br /&gt;
 1 files changed, 0 insertions(+), 5 deletions(-)&lt;br /&gt;
&lt;br /&gt;
commit a11bef06a3f659402fe7563abf99ad00de2209e6&lt;br /&gt;
Author: Scott Chacon &amp;lt;schacon@gee-mail.com&amp;gt;&lt;br /&gt;
Date:   Sat Mar 15 10:31:28 2008 -0700&lt;br /&gt;
&lt;br /&gt;
    first commit&lt;br /&gt;
&lt;br /&gt;
 README           |    6 ++++++&lt;br /&gt;
 Rakefile         |   23 +++++++++++++++++++++++&lt;br /&gt;
 lib/simplegit.rb |   25 +++++++++++++++++++++++++&lt;br /&gt;
 3 files changed, 54 insertions(+), 0 deletions(-)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
每個提交都列出了修改過的檔，以及其中添加和移除的行數，並在最後列出所有增減行數小計。&lt;br /&gt;
&lt;br /&gt;
還有個常用的 --pretty 選項，可以指定使用完全不同於預設格式的方式展示提交歷史。&amp;lt;br&amp;gt;&lt;br /&gt;
比如用 oneline 將每個提交放在一行顯示，這在提交數很大時非常有用。&amp;lt;br&amp;gt;&lt;br /&gt;
另外還有 short，full 和 fuller 可以用，展示的資訊或多或少有些不同，請自己動手實踐一下看看效果如何。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git log --pretty=oneline&lt;br /&gt;
ca82a6dff817ec66f44342007202690a93763949 changed the verison number&lt;br /&gt;
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code&lt;br /&gt;
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
但最有意思的是 format，可以定制要顯示的記錄格式，這樣的輸出便於後期程式設計提取分析，像這樣：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git log --pretty=format:&amp;quot;%h - %an, %ar : %s&amp;quot;&lt;br /&gt;
ca82a6d - Scott Chacon, 11 months ago : changed the verison number&lt;br /&gt;
085bb3b - Scott Chacon, 11 months ago : removed unnecessary test code&lt;br /&gt;
a11bef0 - Scott Chacon, 11 months ago : first commit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
表 2-1 列出了常用的格式預留位置寫法及其代表的意義。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
選項	 說明&lt;br /&gt;
%H	提交對象（commit）的完整雜湊字串&lt;br /&gt;
%h	提交對象的簡短雜湊字串&lt;br /&gt;
%T	樹對象（tree）的完整雜湊字串&lt;br /&gt;
%t	樹對象的簡短雜湊字串&lt;br /&gt;
%P	父物件（parent）的完整雜湊字串&lt;br /&gt;
%p	父物件的簡短雜湊字串&lt;br /&gt;
%an	作者（author）的名字&lt;br /&gt;
%ae	作者的電子郵寄地址&lt;br /&gt;
%ad	作者修訂日期（可以用 -date= 選項定制格式）&lt;br /&gt;
%ar	作者修訂日期，按多久以前的方式顯示&lt;br /&gt;
%cn	提交者(committer)的名字&lt;br /&gt;
%ce	提交者的電子郵寄地址&lt;br /&gt;
%cd	提交日期&lt;br /&gt;
%cr	提交日期，按多久以前的方式顯示&lt;br /&gt;
%s	提交說明&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
你一定奇怪 作者（author）和 提交者（committer）之間究竟有何差別，其實作者指的是實際作出修改的人，提交者指的是最後將此工作成果提交到倉庫的人。所以，當你為某個項目發佈補丁，然後某個核心成員將你的補丁併入項目時，你就是作者，而那個核心成員就是提交者。我們會在第五章再詳細介紹兩者之間的細緻差別。&lt;br /&gt;
&lt;br /&gt;
用 oneline 或 format 時結合 --graph 選項，可以看到開頭多出一些 ASCII 字串表示的簡單圖形，形象地展示了每個提交所在的分支及其分化衍合情況。在我們之前提到的 Grit 項目倉庫中可以看到：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git log --pretty=format:&amp;quot;%h %s&amp;quot; --graph&lt;br /&gt;
* 2d3acf9 ignore errors from SIGCHLD on trap&lt;br /&gt;
*  5e3ee11 Merge branch 'master' of git://github.com/dustin/grit&lt;br /&gt;
|\  &lt;br /&gt;
| * 420eac9 Added a method for getting the current branch.&lt;br /&gt;
* | 30e367c timeout code and tests&lt;br /&gt;
* | 5a09431 add timeout protection to grit&lt;br /&gt;
* | e1193f8 support for heads with slashes in them&lt;br /&gt;
|/  &lt;br /&gt;
* d6016bc require time for xmlschema&lt;br /&gt;
*  11d191e Merge branch 'defunkt' into local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
以上只是簡單介紹了一些 git log 命令支援的選項。表 2-2 還列出了一些其他常用的選項及其釋義。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
選項 說明&lt;br /&gt;
-p 按補丁格式顯示每個更新之間的差異。&lt;br /&gt;
--stat 顯示每次更新的檔修改統計資訊。&lt;br /&gt;
--shortstat 只顯示 --stat 中最後的行數修改添加移除統計。&lt;br /&gt;
--name-only 僅在提交資訊後顯示已修改的檔清單。&lt;br /&gt;
--name-status 顯示新增、修改、刪除的檔清單。&lt;br /&gt;
--abbrev-commit 僅顯示 SHA-1 的前幾個字元，而非所有的 40 個字元。&lt;br /&gt;
--relative-date 使用較短的相對時間顯示（比如，“2 weeks ago”）。&lt;br /&gt;
--graph 顯示 ASCII 圖形表示的分支合併歷史。&lt;br /&gt;
--pretty 使用其他格式顯示歷史提交資訊。可用的選項包括 oneline，short，full，fuller 和 format（後跟指定格式）。&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=限制輸出長度=&lt;br /&gt;
&lt;br /&gt;
除了定制輸出格式的選項之外，git log 還有許多非常實用的限制輸出長度的選項，也就是只輸出部分提交資訊。&amp;lt;br&amp;gt;&lt;br /&gt;
之前我們已經看到過 -2 了，它只顯示最近的兩條提交，實際上，這是 -&amp;lt;n&amp;gt; 選項的寫法，其中的 n 可以是任何自然數，表示僅顯示最近的若干條提交。&amp;lt;br&amp;gt;&lt;br /&gt;
不過實務上我們是不太用這個選項的，Git 在輸出所有提交時會自動調用分頁程式（pager），要看更早的更新只需翻到下頁即可。&lt;br /&gt;
&lt;br /&gt;
另外還有按照時間作限制的選項，比如 --since 和 --until。下面的命令列出所有最近兩周內的提交：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git log --since=2.weeks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
你可以給出各種時間格式，比如說具體的某一天（“2008-01-15”），或者是多久以前（“2 years 1 day 3 minutes ago”）。&lt;br /&gt;
&lt;br /&gt;
還可以給出若干搜索條件，列出符合的提交。&amp;lt;br&amp;gt;&lt;br /&gt;
用 --author 選項顯示指定作者的提交，用 --grep 選項搜索提交說明中的關鍵字。（請注意，如果要得到同時滿足這兩個選項搜索條件的提交，就必須用 --all-match 選項。）&lt;br /&gt;
&lt;br /&gt;
如果只關心某些檔或者目錄的歷史提交，可以在 git log 選項的最後指定它們的路徑。因為是放在最後位置上的選項，所以用兩個短劃線（--）隔開之前的選項和後面限定的路徑名。&lt;br /&gt;
&lt;br /&gt;
表 2-3 還列出了其他常用的類似選項。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
選項 說明&lt;br /&gt;
-(n)	僅顯示最近的 n 條提交&lt;br /&gt;
--since, --after 僅顯示指定時間之後的提交。&lt;br /&gt;
--until, --before 僅顯示指定時間之前的提交。&lt;br /&gt;
--author 僅顯示指定作者相關的提交。&lt;br /&gt;
--committer 僅顯示指定提交者相關的提交。&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
來看一個實際的例子，如果要查看 Git 倉庫中，2008 年 10 月期間，Junio Hamano 提交的但未合併的測試腳本（位於專案的 t/ 目錄下的檔），可以用下面的查詢命令：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git log --pretty=&amp;quot;%h:%s&amp;quot; --author=gitster --since=&amp;quot;2008-10-01&amp;quot; \&lt;br /&gt;
   --before=&amp;quot;2008-11-01&amp;quot; --no-merges -- t/&lt;br /&gt;
5610e3b - Fix testcase failure when extended attribute&lt;br /&gt;
acd3b9e - Enhance hold_lock_file_for_{update,append}()&lt;br /&gt;
f563754 - demonstrate breakage of detached checkout wi&lt;br /&gt;
d1a43f2 - reset --hard/read-tree --reset -u: remove un&lt;br /&gt;
51a94af - Fix &amp;quot;checkout --track -b newbranch&amp;quot; on detac&lt;br /&gt;
b0ad11e - pull: allow &amp;quot;git pull origin $something:$cur&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git 專案有 20,000 多條提交，但我們給出搜索選項後，僅列出了其中滿足條件的 6 條。&lt;br /&gt;
&lt;br /&gt;
=使用圖形化工具查閱提交歷史=&lt;br /&gt;
&lt;br /&gt;
有時候圖形化工具更容易展示歷史提交的變化，隨 Git 一同發佈的 gitk 就是這樣一種工具。它是用 Tcl/Tk 寫成的，基本上相當於 git log 命令的視覺化版本，凡是 git log 可以用的選項也都能用在 gitk 上。在專案工作目錄中輸入 gitk 命令後，就會啟動圖 2-2 所示的介面。&lt;br /&gt;
&lt;br /&gt;
[[圖片:pro-git-2-2.png]]&lt;br /&gt;
圖 2-2. gitk 的圖形介面&lt;br /&gt;
&lt;br /&gt;
上半個視窗顯示的是歷次提交的分支祖先圖譜，下半個視窗顯示當前點選的提交對應的具體差異。&lt;/div&gt;</summary>
		<author><name>imported&gt;Ray</name></author>
	</entry>
</feed>