查看提交历史 —— Git 学习笔记 11
查看提交歷史
- 查看提交歷史
- 不帶任何選項的git log
- -p選項
- --stat 選項
- --pretty=oneline選項
- --pretty=format選項
- git log常用選項列表
- 參考資料
在提交了若干更新,又或者克隆了某個項目之后,你也許想回顧下提交歷史。 完成這個任務最簡單而又有效的
工具是 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 -0700changed the verison numbercommit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon <schacon@gmail.com> Date: Sat Mar 15 16:40:33 2008 -0700removed unnecessary test codecommit a11bef06a3f659402fe7563abf99ad00de2209e6 Author: Scott Chacon <schacon@gmail.com> Date: Sat Mar 15 10:31:28 2008 -0700first 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 -0700changed the verison numberdiff --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::RUBYs.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 -0700removed unnecessary test codediff --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 SimpleGitendend - -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 -0700changed the verison numberRakefile | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon <schacon@gmail.com> Date: Sat Mar 15 16:40:33 2008 -0700removed unnecessary test codelib/simplegit.rb | 5 -----1 file changed, 5 deletions(-)commit a11bef06a3f659402fe7563abf99ad00de2209e6 Author: Scott Chacon <schacon@gmail.com> Date: Sat Mar 15 10:31:28 2008 -0700first commitREADME | 6 ++++++Rakefile | 23 +++++++++++++++++++++++lib/simplegit.rb | 25 +++++++++++++++++++++++++3 files changed, 54 insertions(+) (END)正如你所看到的,--stat 選項在每次提交的下面列出所有被修改過的文件、有多少文件被修改了以及被修改過
的文件有多少行被修改了(刪除或者添加)。 在每次提交的最后還有一個總結——有幾個文件被修改,一共增加了幾行,刪除了幾行。
--pretty=oneline選項
另外一個常用的選項是 --pretty。 這個選項可以指定使用不同于默認格式的方式展示提交歷史。 這個選項有
一些內建的子選項供你使用。 比如用 oneline 將每個提交放在一行顯示,當查看的提交數很大時非常有用。
--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 commitgit 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 localgit log常用選項列表
以上只是簡單介紹了一些 git log 命令支持的選項。 下表中的 git log 常用選項列出了我們目前涉及到的和沒涉及到的選項,以及它們是如何影響 log 命令的輸出的:
參考資料
《精通Git(第2版)》,Scott Chacon & Ben Straub,人民郵電出版社
總結
以上是生活随笔為你收集整理的查看提交历史 —— Git 学习笔记 11的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 状态机设计模式_设计模式-代理/状态机模
- 下一篇: linux awk 日志分析,Linux