查看提交歷史
在提交了若干更新,又或者克隆了某個項目之后,如何查看提交歷史
git log
官方栗子
運行下面的命令獲取該項目:
git clone https://github.com/scha
運行 git log 命令

可以獲取到的信息
不傳入任何參數(shù)的默認(rèn)情況下,git log 會按時間先后順序列出所有的提交,最近的更新排在最上面
會列出每個提交的 SHA-1 校驗和、作者的名字和電子郵件地址、提交時間以及提交說明
git log 常見命令行參數(shù)
-p、--patch:它會顯示每次提交所引入的差異(按 patch 的格式輸出)。
-n:n 是數(shù)目,限制顯示的日志數(shù)量,比如 -2,輸出兩條

-p 除了顯示基本信息之外,還附帶了每次提交的變化,好處:當(dāng)進行代碼審 review 時,可以快速看到別人提交代碼的差異
--stat
看到每次提交的簡略統(tǒng)計信息

每次提交的下面列出所有被修改過的文件、有多少文件被修改了以及被修改過的文件的哪些行被移除或是添加了
--pretty
可以使用不同格式來顯示提交歷史,有一些內(nèi)建的子選項供你使用。

--pretty=oneline
將每個提交放在一行顯示,在瀏覽大量的提交時非常有用

另外還有 short,full 和 fuller 選項,它們展示信息的格式基本一致,但是詳盡程度不一
--pretty=format
可以定制記錄的顯示格式
這樣的輸出對后期提取分析格外有用,因為輸出的格式不會隨著 Git 的更新而發(fā)生改變

git log --pretty=format 常用的選項
列出了 format 接受的常用格式占位符的寫法及其代表的意義
選項 |
說明 |
%H |
提交的完整哈希值 |
%h |
提交的簡寫哈希值 |
%T |
樹的完整哈希值 |
%t |
樹的簡寫哈希值 |
%P |
父提交的完整哈希值 |
%p |
父提交的簡寫哈希值 |
%an |
作者名字 |
%ae |
作者的電子郵件地址 |
%ad |
作者修訂日期(可以用 --date=選項 來定制格式) |
%ar |
作者修訂日期,按多久以前的方式顯示 |
%cn |
提交者的名字 |
%ce |
提交者的電子郵件地址 |
%cd |
提交日期 |
%cr |
提交日期(距今多長時間) |
%s |
提交說明 |
當(dāng) oneline 或 format 與另一個 log 選項 --graph 結(jié)合使用時尤其有用,展示你的分支、合并歷史:
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 輸出格式的常用選項
選項 |
說明 |
-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 |
使用其他格式顯示歷史提交信息??捎玫倪x項包括 oneline、short、full、fuller 和 format(用來定義自己的格式)。 |
--oneline |
--pretty=oneline --abbrev-commit 合用的簡寫。 |
限制輸出長度
-n:限制輸出提交歷史的數(shù)量
--since、--until:按照時間限制
下面的命令會列出最近兩周的所有提交
git log --since=2.weeks
該命令可用的格式十分豐富
可以是類似 "2008-01-15" 的具體的某一天,也可以是類似 "2 years 1 day 3 minutes ago" 的相對日期。
git lot 限制輸出的選項
選項 |
說明 |
-<n> |
僅顯示最近的 n 條提交。 |
--since, --after |
僅顯示指定時間之后的提交。 |
--until, --before |
僅顯示指定時間之前的提交。 |
--author |
僅顯示作者匹配指定字符串的提交。 |
--committer |
僅顯示提交者匹配指定字符串的提交。 |
--grep |
僅顯示提交說明中包含指定字符串的提交。 |
-S |
僅顯示添加或刪除內(nèi)容匹配指定字符串的提交。 |
-- |
僅顯示某些文件或目錄的歷史提交,-- 文件名/目錄名 |
--no-merges |
不顯示合并提交的歷史記錄 |
來看一個實際的例子,如果要在 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
git commit 沒反應(yīng)
git commit 沒有反應(yīng)的原因可能有很多,下面是一些常見的原因:
你沒有將文件添加到暫存區(qū),因此 git commit 無法提交。你需要在 git commit 之前運行 git add 將文件添加到暫存區(qū)。
你的 git 配置文件中缺少用戶名和電子郵件地址。git commit 需要這些信息來記錄提交的作者和郵箱。
你的 git 客戶端版本過舊,不兼容當(dāng)前的 git 服務(wù)器版本。
你正在進行的操作在 git 分支上是不安全的,如:正在合并分支或正在執(zhí)行 Gitflow 工作流程中的操作。
你沒有權(quán)限提交到遠(yuǎn)程倉庫。
你的網(wǎng)絡(luò)連接中斷導(dǎo)致無法連接到遠(yuǎn)程倉庫。文章來源:http://www.zghlxwxcb.cn/news/detail-458218.html
如果你無法解決問題,可以嘗試查看 git 的日志文件(通常在 .git/logs 目錄中)或檢查遠(yuǎn)程倉庫的日志以獲取更多信息。文章來源地址http://www.zghlxwxcb.cn/news/detail-458218.html
到了這里,關(guān)于Git - 查看 commit 提交歷史的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!