日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git 历史操作日志_Git - 查看提交历史

發(fā)布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git 历史操作日志_Git - 查看提交历史 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

查看提交歷史

在提交了若干更新,又或者克隆了某個項目之后,你也許想回顧下提交歷史。

完成這個任務(wù)最簡單而又有效的工具是 git log 命令。

我們使用一個非常簡單的 “simplegit” 項目作為示例。

運行下面的命令獲取該項目:

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

當(dāng)你在此項目中運行 git log 命令時,可以看到下面的輸出:

$ git log

commit ca82a6dff817ec66f44342007202690a93763949

Author: Scott Chacon

Date: Mon Mar 17 21:52:11 2008 -0700

changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7

Author: Scott Chacon

Date: Sat Mar 15 16:40:33 2008 -0700

removed unnecessary test

commit a11bef06a3f659402fe7563abf99ad00de2209e6

Author: Scott Chacon

Date: Sat Mar 15 10:31:28 2008 -0700

first commit

不傳入任何參數(shù)的默認(rèn)情況下,git log 會按時間先后順序列出所有的提交,最近的更新排在最上面。

正如你所看到的,這個命令會列出每個提交的 SHA-1 校驗和、作者的名字和電子郵件地址、提交時間以及提交說明。

git log 有許多選項可以幫助你搜尋你所要找的提交,

下面我們會介紹幾個最常用的選項。

其中一個比較有用的選項是 -p 或 --patch ,它會顯示每次提交所引入的差異(按 補丁 的格式輸出)。

你也可以限制顯示的日志條目數(shù)量,例如使用 -2 選項來只顯示最近的兩次提交:

$ git log -p -2

commit ca82a6dff817ec66f44342007202690a93763949

Author: Scott Chacon

Date: Mon Mar 17 21:52:11 2008 -0700

changed the version 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@gee-mail.com"

s.summary = "A simple gem for using Git in Ruby code."

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7

Author: Scott Chacon

Date: Sat Mar 15 16:40:33 2008 -0700

removed unnecessary test

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

該選項除了顯示基本信息之外,還附帶了每次提交的變化。

當(dāng)進行代碼審查,或者快速瀏覽某個搭檔的提交所帶來的變化的時候,這個參數(shù)就非常有用了。

你也可以為 git log 附帶一系列的總結(jié)性選項。

比如你想看到每次提交的簡略統(tǒng)計信息,可以使用 --stat 選項:

$ git log --stat

commit ca82a6dff817ec66f44342007202690a93763949

Author: Scott Chacon

Date: Mon Mar 17 21:52:11 2008 -0700

changed the version number

Rakefile | 2 +-

1 file changed, 1 insertion(+), 1 deletion(-)

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7

Author: Scott Chacon

Date: Sat Mar 15 16:40:33 2008 -0700

removed unnecessary test

lib/simplegit.rb | 5 -----

1 file changed, 5 deletions(-)

commit a11bef06a3f659402fe7563abf99ad00de2209e6

Author: Scott Chacon

Date: Sat Mar 15 10:31:28 2008 -0700

first commit

README | 6 ++++++

Rakefile | 23 +++++++++++++++++++++++

lib/simplegit.rb | 25 +++++++++++++++++++++++++

3 files changed, 54 insertions(+)

正如你所看到的,--stat 選項在每次提交的下面列出所有被修改過的文件、有多少文件被修改了以及被修改過的文件的哪些行被移除或是添加了。

在每次提交的最后還有一個總結(jié)。

另一個非常有用的選項是 --pretty。

這個選項可以使用不同于默認(rèn)格式的方式展示提交歷史。

這個選項有一些內(nèi)建的子選項供你使用。

比如 oneline 會將每個提交放在一行顯示,在瀏覽大量的提交時非常有用。

另外還有 short,full 和 fuller 選項,它們展示信息的格式基本一致,但是詳盡程度不一:

$ git log --pretty=oneline

ca82a6dff817ec66f44342007202690a93763949 changed the version number

085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test

a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

最有意思的是 format ,可以定制記錄的顯示格式。

這樣的輸出對后期提取分析格外有用——因為你知道輸出的格式不會隨著 Git 的更新而發(fā)生改變:

$ git log --pretty=format:"%h - %an, %ar : %s"

ca82a6d - Scott Chacon, 6 years ago : changed the version number

085bb3b - Scott Chacon, 6 years ago : removed unnecessary test

a11bef0 - Scott Chacon, 6 years ago : first commit

git log --pretty=format 常用的選項 列出了 format 接受的常用格式占位符的寫法及其代表的意義。

Table 1. git log --pretty=format 常用的選項

選項

說明

%H

提交的完整哈希值

%h

提交的簡寫哈希值

%T

樹的完整哈希值

%t

樹的簡寫哈希值

%P

父提交的完整哈希值

%p

父提交的簡寫哈希值

%an

作者名字

%ae

作者的電子郵件地址

%ad

作者修訂日期(可以用 --date=選項 來定制格式)

%ar

作者修訂日期,按多久以前的方式顯示

%cn

提交者的名字

%ce

提交者的電子郵件地址

%cd

提交日期

%cr

提交日期(距今多長時間)

%s

提交說明

你一定奇怪 作者 和 提交者 之間究竟有何差別,

其實作者指的是實際作出修改的人,提交者指的是最后將此工作成果提交到倉庫的人。

所以,當(dāng)你為某個項目發(fā)布補丁,然后某個核心成員將你的補丁并入項目時,你就是作者,而那個核心成員就是提交者。

我們會在 分布式 Git 再詳細(xì)介紹兩者之間的細(xì)微差別。

當(dāng) oneline 或 format 與另一個 log 選項 --graph 結(jié)合使用時尤其有用。

這個選項添加了一些 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

這種輸出類型會在我們下一章學(xué)完分支與合并以后變得更加有趣。

以上只是簡單介紹了一些 git log 命令支持的選項。

git log 的常用選項 列出了我們目前涉及到的和沒涉及到的選項,以及它們是如何影響 log 命令的輸出的:

Table 2. git log 的常用選項

選項

說明

-p

按補丁格式顯示每個提交引入的差異。

--stat

顯示每次提交的文件修改統(tǒng)計信息。

--shortstat

只顯示 --stat 中最后的行數(shù)修改添加移除統(tǒng)計。

--name-only

僅在提交信息后顯示已修改的文件清單。

--name-status

顯示新增、修改、刪除的文件清單。

--abbrev-commit

僅顯示 SHA-1 校驗和所有 40 個字符中的前幾個字符。

--relative-date

使用較短的相對時間而不是完整格式顯示日期(比如“2 weeks ago”)。

--graph

在日志旁以 ASCII 圖形顯示分支與合并歷史。

--pretty

使用其他格式顯示歷史提交信息。可用的選項包括 oneline、short、full、fuller 和 format(用來定義自己的格式)。

--oneline

--pretty=oneline --abbrev-commit 合用的簡寫。

限制輸出長度

除了定制輸出格式的選項之外,git log 還有許多非常實用的限制輸出長度的選項,也就是只輸出一部分的提交。

之前你已經(jīng)看到過 -2 選項了,它只會顯示最近的兩條提交,

實際上,你可以使用類似 - 的選項,其中的 n 可以是任何整數(shù),表示僅顯示最近的 n 條提交。

不過實踐中這個選項不是很常用,因為 Git 默認(rèn)會將所有的輸出傳送到分頁程序中,所以你一次只會看到一頁的內(nèi)容。

但是,類似 --since 和 --until 這種按照時間作限制的選項很有用。

例如,下面的命令會列出最近兩周的所有提交:

$ git log --since=2.weeks

該命令可用的格式十分豐富——可以是類似 "2008-01-15" 的具體的某一天,也可以是類似 "2 years 1 day 3 minutes ago" 的相對日期。

還可以過濾出匹配指定條件的提交。

用 --author 選項顯示指定作者的提交,用 --grep 選項搜索提交說明中的關(guān)鍵字。

Note

你可以指定多個 --author 和 --grep 搜索條件,這樣會只輸出 任意 匹配

--author 模式和 --grep 模式的提交。然而,如果你添加了 --all-match 選項,

則只會輸出 所有 匹配 --grep 模式的提交。

另一個非常有用的過濾器是 -S(俗稱“pickaxe”選項,取“用鶴嘴鋤在土里撿石頭”之意),

它接受一個字符串參數(shù),并且只會顯示那些添加或刪除了該字符串的提交。

假設(shè)你想找出添加或刪除了對某一個特定函數(shù)的引用的提交,可以調(diào)用:

$ git log -S function_name

最后一個很實用的 git log 選項是路徑(path),

如果只關(guān)心某些文件或者目錄的歷史提交,可以在 git log 選項的最后指定它們的路徑。

因為是放在最后位置上的選項,所以用兩個短劃線(--)隔開之前的選項和后面限定的路徑名。

Table 3. 限制 git log 輸出的選項

選項

說明

-

僅顯示最近的 n 條提交。

--since, --after

僅顯示指定時間之后的提交。

--until, --before

僅顯示指定時間之前的提交。

--author

僅顯示作者匹配指定字符串的提交。

--committer

僅顯示提交者匹配指定字符串的提交。

--grep

僅顯示提交說明中包含指定字符串的提交。

-S

僅顯示添加或刪除內(nèi)容匹配指定字符串的提交。

來看一個實際的例子,如果要在 Git 源碼庫中查看 Junio Hamano 在 2008 年 10 月其間,

除了合并提交之外的哪一個提交修改了測試文件,可以使用下面的命令:

$ git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \

--before="2008-11-01" --no-merges -- t/

5610e3b - Fix testcase failure when extended attributes are in use

acd3b9e - Enhance hold_lock_file_for_{update,append}() API

f563754 - demonstrate breakage of detached checkout with symbolic link HEAD

d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths

51a94af - Fix "checkout --track -b newbranch" on detached HEAD

b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch

在近 40000 條提交中,上面的輸出僅列出了符合條件的 6 條記錄。

Tip

隱藏合并提交

按照你代碼倉庫的工作流程,記錄中可能有為數(shù)不少的合并提交,它們所包含的信息通常并不多。

為了避免顯示的合并提交弄亂歷史記錄,可以為 log 加上 --no-merges 選項。

總結(jié)

以上是生活随笔為你收集整理的git 历史操作日志_Git - 查看提交历史的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。