git 使用詳解(5)-- get log 查看提交曆史【轉】

來源:互聯網
上載者:User

標籤:分頁   center   erro   分支合并   log   track   one   dex   title   

轉自:http://blog.csdn.net/wh_19910525/article/details/7468549

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

 

目錄(?)[-]

  1. 限制輸出長度
  2. 使用圖形化工具查閱提交曆史
   git log   查看 提交曆史

在提交了若干更新之後,又或者複製了某個項目,想回顧下提交曆史,可以使用 Git log 命令查看。

接下來的例子會用我專門用於示範的 simplegit 項目,運行下面的命令擷取該項目原始碼:

git clone git://github.com/schacon/simplegit-progit.git

然後在此項目中運行 git log,應該會看到下面的輸出:

$ git logcommit ca82a6dff817ec66f44342007202690a93763949Author: Scott Chacon <[email protected]>Date:   Mon Mar 17 21:52:11 2008 -0700    changed the version numbercommit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7Author: Scott Chacon <[email protected]>Date:   Sat Mar 15 16:40:33 2008 -0700    removed unnecessary test codecommit a11bef06a3f659402fe7563abf99ad00de2209e6Author: Scott Chacon <[email protected]>Date:   Sat Mar 15 10:31:28 2008 -0700    first commit

預設不用任何參數的話,git log 會按提交時間列出所有的更新,最近的更新排在最上面。看到了嗎,每次更新都有一個 SHA-1 校正和、作者的名字 和 電子郵件地址、提交時間,最後縮排一個段落顯示提交說明。

git log 有許多選項可以協助你搜尋感興趣的提交,接下來我們介紹些最常用的。

我們常用 -p 選項展開顯示每次提交的內容差異,用 -2 則僅顯示最近的兩次更新

$ git log -p -2commit ca82a6dff817ec66f44342007202690a93763949Author: Scott Chacon <[email protected]>Date:   Mon Mar 17 21:52:11 2008 -0700    changed the version numberdiff --git a/Rakefile b/Rakefileindex a874b73..8f94139 100644--- a/Rakefile+++ b/Rakefile@@ -5,7 +5,7 @@ require ‘rake/gempackagetask‘ spec = Gem::Specification.new do |s|-    s.version   =   "0.1.0"+    s.version   =   "0.1.1"     s.author    =   "Scott Chacon"commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7Author: Scott Chacon <[email protected]>Date:   Sat Mar 15 16:40:33 2008 -0700    removed unnecessary test codediff --git a/lib/simplegit.rb b/lib/simplegit.rbindex a0a60ae..47c6340 100644--- a/lib/simplegit.rb+++ b/lib/simplegit.rb@@ -18,8 +18,3 @@ class SimpleGit     end end--if $0 == __FILE__-  git = SimpleGit.new-  puts git.show-end\ No newline at end of file

在做代碼審查,或者要快速探索其他共同作業者提交的更新都作了哪些改動時,就可以用這個選項。此外,還有許多摘要選項可以用,比如 --stat,僅顯示簡要的增改行數統計:

$ git log --stat commit ca82a6dff817ec66f44342007202690a93763949Author: Scott Chacon <[email protected]>Date:   Mon Mar 17 21:52:11 2008 -0700    changed the version number Rakefile |    2 +- 1 files changed, 1 insertions(+), 1 deletions(-)commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7Author: Scott Chacon <[email protected]>Date:   Sat Mar 15 16:40:33 2008 -0700    removed unnecessary test code lib/simplegit.rb |    5 ----- 1 files changed, 0 insertions(+), 5 deletions(-)commit a11bef06a3f659402fe7563abf99ad00de2209e6Author: Scott Chacon <[email protected]>Date:   Sat Mar 15 10:31:28 2008 -0700    first commit README           |    6 ++++++ Rakefile         |   23 +++++++++++++++++++++++ lib/simplegit.rb |   25 +++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 0 deletions(-)

每個提交都列出了修改過的檔案,以及其中添加和移除的行數,並在最後列出所有增減行數小計。還有個常用的--pretty 選項,可以指定使用完全不同於預設格式的方式展示提交曆史。比如oneline 將 每個提交 放在一行顯示,這在提交數很大時非常有用。另外還有shortfull 和fuller 可以用,展示的資訊或多或少有些不同,請自己動手實踐一下看看效果如何。

$ git log --pretty=onelineca82a6dff817ec66f44342007202690a93763949 changed the version number085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test codea11bef06a3f659402fe7563abf99ad00de2209e6 first commit

但最有意思的是 format,可以定製要顯示的記錄格式,這樣的輸出便於後期編程提取分析,像這樣:

$ git log --pretty=format:"%h - %an, %ar : %s"ca82a6d - Scott Chacon, 11 months ago : changed the version number085bb3b - Scott Chacon, 11 months ago : removed unnecessary test codea11bef0 - Scott Chacon, 11 months ago : first commit

表 2-1 列出了常用的格式預留位置寫法及其代表的意義。

選項 說明%H提交對象(commit)的完整雜湊字串%h提交對象的簡短雜湊字串%T樹對象(tree)的完整雜湊字串%t樹對象的簡短雜湊字串%P父物件(parent)的完整雜湊字串%p父物件的簡短雜湊字串%an作者(author)的名字%ae作者的電子郵件地址%ad作者修訂日期(可以用 -date= 選項定製格式)%ar作者修訂日期,按多久以前的方式顯示%cn提交者(committer)的名字%ce提交者的電子郵件地址%cd提交日期%cr提交日期,按多久以前的方式顯示%s提交說明

你一定奇怪_作者(author)_和_提交者(committer)_之間究竟有何差別,其實作者指的是實際作出修改的人,提交者指的是最後將此工作成果提交到倉庫的人。所以,當你為某個項目發布補丁,然後某個核心成員將你的補丁併入項目時,你就是作者,而那個核心成員就是提交者。我們會在第五章再詳細介紹兩者之間的細微差別。

用 oneline 或 format 時結合 --graph 選項,可以看到開頭多出一些 ASCII 字串表示的簡單圖形,形象地展示了每個提交所在的分支及其分化衍合情況。在我們之前提到的 Grit 項目倉庫中可以看到:

$ git log --pretty=format:"%h %s" --graph* 2d3acf9 ignore errors from SIGCHLD on trap*  5e3ee11 Merge branch ‘master‘ of git://github.com/dustin/grit|| * 420eac9 Added a method for getting the current branch.* | 30e367c timeout code and tests* | 5a09431 add timeout protection to grit* | e1193f8 support for heads with slashes in them|/* d6016bc require time for xmlschema*  11d191e Merge branch ‘defunkt‘ into local

以上只是簡單介紹了一些 git log 命令支援的選項。表 2-2 還列出了一些其他常用的選項及其釋義。

選項 說明-p 按補丁格式顯示每個更新之間的差異--stat 顯示每次更新的檔案修改統計資訊。--shortstat 只顯示 --stat 中最後的行數修改添加移除統計。--name-only 僅在提交資訊後顯示已修改的檔案清單。--name-status 顯示新增、修改、刪除的檔案清單。--abbrev-commit 僅顯示 SHA-1 的前幾個字元,而非所有的 40 個字元。--relative-date 使用較短的相對時間顯示(比如,“2 weeks ago”)。--graph 顯示 ASCII 圖形表示的分支合并曆史。--pretty 使用其他格式顯示曆史提交資訊。可用的選項包括 oneline,short,full,fuller 和 format(後跟指定格式)。
限制輸出長度

除了定製輸出格式的選項之外,git log 還有許多非常實用的限制輸出長度的選項,也就是只輸出部分提交資訊。之前我們已經看到過 -2 了,它只顯示最近的兩條提交,實際上,這是 -<n> 選項的寫法,其中的 n 可以是任何自然數,表示僅顯示最近的若干條提交。不過實踐中我們是不太用這個選項的,Git 在輸出所有提交時會自動調用分頁程式(less),要看更早的更新只需翻到下頁即可。

另外還有按照時間作限制的選項,比如 --since 和 --until。下面的命令列出所有最近兩周內的提交:

$ git log --since=2.weeks

你可以給出各種時間格式,比如說具體的某一天(“2008-01-15”),或者是多久以前(“2 years 1 day 3 minutes ago”)。

還可以給出若干搜尋條件,列出符合的提交。用 --author 選項顯示指定作者的提交,用 --grep 選項搜尋提交說明中的關鍵字。(請注意,如果要得到同時滿足這兩個選項搜尋條件的提交,就必須用--all-match 選項。)

如果只關心某些檔案或者目錄的曆史提交,可以在 git log 選項的最後指定它們的路徑。因為是放在最後位置上的選項,所以用兩個短劃線(--)隔開之前的選項和後面限定的路徑名。

表 2-3 還列出了其他常用的類似選項。

選項 說明-(n)僅顯示最近的 n 條提交--since, --after 僅顯示指定時間之後的提交。--until, --before 僅顯示指定時間之前的提交。--author 僅顯示指定作者相關的提交。--committer 僅顯示指定提交者相關的提交。

來看一個實際的例子,如果要查看 Git 倉庫中,2008 年 10 月期間,Junio Hamano 提交的但未合并的測試指令碼(位於項目的 t/ 目錄下的檔案),可以用下面的查詢命令:

$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01"    --before="2008-11-01" --no-merges -- t/5610e3b - Fix testcase failure when extended attributeacd3b9e - Enhance hold_lock_file_for_{update,append}()f563754 - demonstrate breakage of detached checkout wid1a43f2 - reset --hard/read-tree --reset -u: remove un51a94af - Fix "checkout --track -b newbranch" on detacb0ad11e - pull: allow "git pull origin $something:$cur

Git 項目有 20,000 多條提交,但我們給出搜尋選項後,僅列出了其中滿足條件的 6 條。

使用圖形化工具查閱提交曆史

有時候圖形化工具更容易展示曆史提交的變化,隨 Git 一同發布的 gitk 就是這樣一種工具。它是用 Tcl/Tk 寫成的,基本上相當於 git log 命令的可視化版本,凡是git log 可以用的選項也都能用在 gitk 上。在項目工作目錄中輸入 gitk 命令後,就會啟動圖 2-2 所示的介面。


圖 2-2. gitk 的圖形介面

上半個視窗顯示的是曆次提交的分支祖先圖譜,下半個視窗顯示當前點選的提交對應的具體差異。

git 使用詳解(5)-- get log 查看提交曆史【轉】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.