@
目錄- 1、git clone
- 2、git log
- 3、git log -p
- 4、git log --stat
- 5、git log --pretty=oneline
- 6、git log --pretty=short
- 7、git log --pretty=full
- 8、git log --pretty=fuller
- 9、定制記錄的顯示格式:git log --pretty=format
- 10、git log --oneline
- 11、限制輸出長度
- git log --since=14.years
- git log --since=14 years 1 day 3 minutes ago
- git log --since="2008-01-15"
- 12、實體:
在提交了若干更新,又或者
clone了某個專案之后,你也許想回顧下提交歷史, 完成這個任務最簡單而又有效的工具是 git log 命令,
1、git clone
我們使用一個非常簡單的 “simplegit” 專案作為示例:
位置:https://github.com/schacon/simplegit-progit

運行下面的命令獲取該專案:
git clone https://github.com/schacon/simplegit-progit

2、git log
當你在此專案中運行 git log 命令時,可以看到下面的輸出:

Git(4)-- 如何退出 git log 和 git commit 狀態
不傳入任何引數的默認情況下,git log 會按時間先后順序列出所有的提交,最近的更新排在最上面, 正如你所看到的,這個命令會列出每個提交的 SHA-1 校驗和、作者的名字和電子郵件地址、提交時間以及提交說明,
git log 有許多選項可以幫助你搜尋你所要找的提交, 下面我們會介紹幾個最常用的選項,
3、git log -p
其中一個比較有用的選項是 -p 或 --patch ,它會顯示每次提交所引入的差異(按 補丁 的格式輸出), 你也可以限制顯示的日志條目數量,例如使用 -2 選項來只顯示最近的兩次提交:

該選項除了顯示基本資訊之外,還附帶了每次提交的變化, 當進行代碼審查,或者快速瀏覽某個搭檔的提交所帶來的變化的時候,這個引數就非常有用了, 你也可以為 git log 附帶一系列的總結性選項, 比如你想看到每次提交的簡略統計資訊,可以使用 --stat 選項:
4、git log --stat

正如你所看到的,--stat 選項在每次提交的下面列出所有被修改過的檔案、有多少檔案被修改了以及被修改過的檔案的哪些行被移除或是添加了, 在每次提交的最后還有一個總結,
5、git log --pretty=oneline
另一個非常有用的選項是 --pretty, 這個選項可以使用不同于默認格式的方式展示提交歷史, 這個選項有一些內建的子選項供你使用, 比如 oneline 會將每個提交放在一行顯示,在瀏覽大量的提交時非常有用, 另外還有 short,full 和 fuller 選項,它們展示資訊的格式基本一致,但是詳盡程度不一:

6、git log --pretty=short

7、git log --pretty=full

8、git log --pretty=fuller

9、定制記錄的顯示格式:git log --pretty=format
最有意思的是 format ,可以定制記錄的顯示格式, 這樣的輸出對后期提取分析格外有用——因為你知道輸出的格式不會隨著 Git 的更新而發生改變:

git log --pretty=format 常用的選項 列出了 format 接受的常用格式占位符的寫法及其代表的意義,
git log --pretty=format 常用的選項 :
| 選項 | 說明 |
|---|---|
| %H | 提交的完整哈希值 |
| %h | 提交的簡寫哈希值 |
| %T | 樹的完整哈希值 |
| %t | 樹的簡寫哈希值 |
| %P | 父提交的完整哈希值 |
| %p | 父提交的簡寫哈希值 |
| %an | 作者名字 |
| %ae | 作者的電子郵件地址 |
| %ad | 作者修訂日期(可以用 --date=選項 來定制格式) |
| %ar | 作者修訂日期,按多久以前的方式顯示 |
| %cn | 提交者的名字 |
| %ce | 提交者的電子郵件地址 |
| %cd | 提交日期 |
| %cr | 提交日期(距今多長時間) |
| %s | 提交說明 |
作者指的是實際作出修改的人,提交者指的是最后將此作業成果提交到倉庫的人, 所以,當你為某個專案發布補丁,然后某個核心成員將你的補丁并入專案時,你就是作者,而那個核心成員就是提交者,
當 oneline 或 format 與另一個 log 選項 --graph 結合使用時尤其有用, 這個選項添加了一些 ASCII 字串來形象地展示你的分支、合并歷史:

在git原始碼庫中使用此命令,專案太多了,截圖兩張了解下:
首頁:

某一頁:

以上只是簡單介紹了一些 git log 命令支持的選項, git log 的常用選項 列出了我們目前涉及到的和沒涉及到的選項,以及它們是如何影響 log 命令的輸出的,
git log 的常用選項:
| 選項 | 說明 |
|---|---|
| -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(用來定義自己的格式), |
| --oneline | --pretty=oneline --abbrev-commit 合用的簡寫, |
10、git log --oneline


11、限制輸出長度
除了定制輸出格式的選項之外,git log 還有許多非常實用的限制輸出長度的選項,也就是只輸出一部分的提交, 之前你已經看到過 -2 選項了,它只會顯示最近的兩條提交, 實際上,你可以使用類似 -<n> 的選項,其中的 n 可以是任何整數,表示僅顯示最近的 n 條提交, 不過實踐中這個選項不是很常用,因為 Git 默認會將所有的輸出傳送到分頁程式中,所以你一次只會看到一頁的內容,
但是,類似 --since 和 --until 這種按照時間作限制的選項很有用, 例如,下面的命令會列出最近兩周的所有提交:git log --since=2.weeks
最近14年的所有提交:
git log --since=14.years

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

git log --since="2008-01-15"

還可以過濾出匹配指定條件的提交, 用 --author 選項顯示指定作者的提交,用 --grep 選項搜索提交說明中的關鍵字,
你可以指定多個 --author 和 --grep 搜索條件,這樣會只輸出 任意 匹配 --author 模式和 --grep 模式的提交,然而,如果你添加了 --all-match 選項, 則只會輸出 所有 匹配 --grep 模式的提交,
另一個非常有用的過濾器是 -S, 它接受一個字串引數,并且只會顯示那些添加或洗掉了該字串的提交, 假設你想找出添加或洗掉了對某一個特定函式的參考的提交,可以呼叫:
git log -S function_name
最后一個很實用的 git log 選項是路徑(path), 如果只關心某些檔案或者目錄的歷史提交,可以在 git log 選項的最后指定它們的路徑, 因為是放在最后位置上的選項,所以用兩個短劃線(--)隔開之前的選項和后面限定的路徑名,
在 限制 git log 輸出的選項 中列出了常用的選項,
限制 git log 輸出的選項:
| 選項 | 說明 |
|---|---|
| -<n |
僅顯示最近的 n 條提交, |
| --since, --after | 僅顯示指定時間之后的提交, |
| --until, --before | 僅顯示指定時間之前的提交, |
| --author | 僅顯示作者匹配指定字串的提交, |
| --committer | 僅顯示提交者匹配指定字串的提交, |
| --grep | 僅顯示提交說明中包含指定字串的提交, |
| -S | 僅顯示添加或洗掉內容匹配指定字串的提交, |
12、實體:
來看一個實際的例子,如果要在 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/
Git 原始碼庫:https://github.com/git/git

clone: git clone https://github.com/git/git.git

命令:
git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" --before="2008-11-01" --no-merges -- t/

在近 40000 條提交中,上面的輸出僅列出了符合條件的 6 條記錄,
隱藏合并提交: 按照你代碼倉庫的作業流程,記錄中可能有為數不少的合并提交,它們所包含的資訊通常并不多,為了避免顯示的合并提交弄亂歷史記錄,可以為 log 加上 --no-merges 選項,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296200.html
標籤:其他
下一篇:光學動作捕捉系統原理
