檢視提交歷史 —— Git 學習筆記 11
檢視提交歷史
在提交了若干更新,又或者克隆了某個專案之後,你也許想回顧下提交歷史。 完成這個任務最簡單而又有效的
工具是 git log 命令。
接下來的例子會用一個用於演示的 simplegit 專案, 執行下面的命令獲取該專案原始碼:
git clone https://github.com/schacon/simplegit-progit
Cloning into 'simplegit-progit'...
remote: Counting objects: 13, done.
remote: Total 13 (delta 0), reused 0 (delta 0), pack-reused 13
Unpacking objects: 100% (13/13), done.
克隆完成後,當前目錄下會多出一個資料夾 simplegit-progit
$ cd simplegit-progit/
$ ls
lib/ Rakefile README
不帶任何選項的git log
執行 git log,應該會看到下面的輸出:
$ git log
commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)
Author: Scott Chacon <schacon@gmail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the verison number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gmail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test code
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gmail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
預設不用任何引數的話,git log 會按提交時間列出所有的更新,最近的更新排在最上面。 正如你所看到的,這個命令會列出每個提交的 SHA-1 校驗和、作者的名字和電子郵件地址、提交時間以及提交說明。
也許你會疑惑第二行的(HEAD -> master, origin/master, origin/HEAD)
,我的理解是:
雖然遠端倉庫沒有工作目錄,但是依然可以有 HEAD 指標,即origin/HEAD
。這個 HEAD 指標指向遠端倉庫的預設分支,當克隆遠端倉庫的時候,只有這個預設分支會被克隆,克隆後就是本地的 master 分支。HEAD -> master
表示當前在 master 分支上。
git log 有許多選項可以幫助你搜尋你所要找的提交, 接下來我們介紹些最常用的。
-p
選項
一個常用的選項是 -p
,用來顯示每次提交的內容差異。 你也可以加上 -2
來僅顯示最近兩次提交:
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)
Author: Scott Chacon <schacon@gmail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the verison number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "schacon@gmail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gmail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test code
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index 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
該選項除了顯示基本資訊之外,還附帶了每次 commit 的變化。 當進行程式碼審查,或者快速瀏覽某個同事提交
的 commit 所帶來的變化的時候,這個引數就非常有用了。
--stat
選項
如果你覺得這些資訊太囉嗦,那麼可以為 git log 附帶一系列的總結性選項。比如說,如果想看每次提交的簡略統計資訊,可以使用 --stat
選項:
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)
Author: Scott Chacon <schacon@gmail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the verison number
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gmail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test code
lib/simplegit.rb | 5 -----
1 file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gmail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
(END)
正如你所看到的,--stat
選項在每次提交的下面列出所有被修改過的檔案、有多少檔案被修改了以及被修改過
的檔案有多少行被修改了(刪除或者新增)。 在每次提交的最後還有一個總結——有幾個檔案被修改,一共增加了幾行,刪除了幾行。
--pretty=oneline
選項
另外一個常用的選項是 --pretty
。 這個選項可以指定使用不同於預設格式的方式展示提交歷史。 這個選項有
一些內建的子選項供你使用。 比如用 oneline 將每個提交放在一行顯示,當檢視的提交數很大時非常有用。
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD) changed the verison number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
--pretty=format
選項
最有意思的是 format,可以定製要顯示的記錄格式。比如:
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 10 years ago : changed the verison number
085bb3b - Scott Chacon, 10 years ago : removed unnecessary test code
a11bef0 - Scott Chacon, 10 years ago : first commit
git log --pretty=format
常用的選項有:
你一定奇怪 “作者” 和 “提交者” 之間究竟有何差別, 其實作者指的是實際作出修改的人,提交者指的是最後將此工
作成果提交到倉庫的人。 所以,當你為某個專案釋出補丁,然後某個核心成員將你的補丁併入專案時,你就是
作者,而那個核心成員就是提交者。
當 oneline 或 format 與另一個 log 選項 --graph
結合使用時,Git 會用一些ASCII字串來形象地展示你的分支、合併歷史:
$ 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
常用選項列表
以上只是簡單介紹了一些 git log 命令支援的選項。 下表中的 git log 常用選項列出了我們目前涉及到的和沒涉及到的選項,以及它們是如何影響 log 命令的輸出的:
參考資料
《精通Git(第2版)》,Scott Chacon & Ben Straub,人民郵電出版社
相關文章
- git檢視提交歷史Git
- Git 檢視提交歷史Git
- git log檢視提交歷史記錄Git
- git簡略形式檢視提交歷史Git
- 二、GIT基礎-檢視提交歷史Git
- 【第八篇】- Git 檢視提交歷史Git
- Git(7)-- 檢視提交歷史(git log 命令詳解)Git
- git檢視歷史命令Git
- Git 檢視檔案的歷史Git
- Git 學習記錄之演變歷史Git
- git log提交歷史詳解Git
- Sqlite學習筆記之Sqlite歷史SQLite筆記
- Git新手教程-檢視倉庫的歷史記錄(四)Git
- 學習筆記 檢視筆記
- 修改 git repo 歷史提交的 authorGit
- git-清空歷史提交記錄(保留原倉庫)Git
- Git改變歷史-章節筆記Git筆記
- 物化檢視學習筆記筆記
- 『現學現忘』Git基礎 — 24、Git中檢視歷史版本記錄Git
- 基於Git rebase修改歷史提交資訊Git
- Activiti 學習筆記六:流程執行歷史記錄筆記
- Git檢視某個歷史版本的最佳實踐Git
- oracle學習筆記——檢視、索引Oracle筆記索引
- git log提交歷史顯示不完全Git
- git提交歷史在一行顯示Git
- Git提交歷史的修改刪除合併Git
- 學習用工具來駕馭 Git 歷史Git
- Oracle中檢視sql命令歷史,檢視rman命令歷史OracleSQL
- Linux檢視歷史記錄小技巧Linux
- git學習筆記Git筆記
- [譯] Hexo git deployer 刪除了提交歷史記錄該怎麼整?HexoGit
- Git 中的物件模型和檔案的詳細檢視 —— Git 學習筆記 13Git物件模型筆記
- 資料庫學習筆記1(資料管理歷史)資料庫筆記
- git重寫歷史記錄Git
- GIT學習筆記一git initGit筆記
- Oracle檢視歷史TOP SQLOracleSQL
- Pro Git 學習筆記Git筆記
- Git的學習筆記Git筆記