【1】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(后跟指定格式)。 |
【2】log --pretty=format:""常用的格式占位符写法及其代表的意义
选项 | 说明 |
---|---|
%H | 提交对象(commit)的完整哈希字串 |
%h | 提交对象的简短哈希字串 |
%T | 树对象(tree)的完整哈希字串 |
%t | 树对象的简短哈希字串 |
%P | 父对象(parent)的完整哈希字串 |
%p | 父对象的简短哈希字串 |
%an | 作者(author)的名字(实际作出修改的人) |
%ae | 作者的电子邮件地址 |
%ad | 作者修订日期(可以用 --date= 选项定制格式) |
%ar | 作者修订日期,按多久以前的方式显示 |
%cn | 提交者(committer)的名字(将此工作成果提交到仓库的人) |
%ce | 提交者的电子邮件地址 |
%cd | 提交日期 |
%cr | 提交日期,按多久以前的方式显示 |
%s | 提交说明 |
【3】限制输出(对log输出做过滤)
选项 | 说明 |
---|---|
-(n) | 仅显示最近的 n 条提交 |
--since, --after | 仅显示指定时间之后的提交。 |
--until, --before | 仅显示指定时间之前的提交。 |
--author | 仅显示指定作者相关的提交。 |
--committer | 仅显示指定提交者相关的提交。 |
--grep | 仅显示含指定关键字的提交 |
-S | 仅显示添加或移除了某个关键字的提交 |
【4】区间的提交日志
图1
- 在 experiment 分支中而不在 master 分支中的提交
$ git log master..experiment
D
C
- 查看在 master分支中而不在 experiment分支中的提交
$ git log experiment..master
F
E
- 输出在你当前分支中而不在远程 origin中的提交(下面两个命令等价,Git默认取HEAD);Git 允许你在任意引用前加上 ^字符或者 --not 来指明你不希望提交被包含其中的分支
$ git log origin/master..HEAD
$ git log origin/master..
- 这三个命令等价,表示包含在refB中,但不包含在refA中的提交
$ git log refA..refB
$ git log ^refA refB
$ git log refB --not refA
- 下面两个等价,同时包含在refA refB,但不包含在refC中的提交
$ git log refA refB ^refC
$ git log refA refB --not refC
- 查看不被master和experiment同时包含的提交
$ git log master...experiment
F
E
D
C
- 对上面命令优化一下,方便查看(明确提交属于哪个分支)
$ git log --left-right master...experiment
< F
< E
> D
> C
【5】常用命令:
1.按提交时间列出所有的更新log,最近的更新排在最上面
$ git log
2.查看最近2此提交的差异log
$ git log -p -2
3.查看每次提交的简略的统计信息
$ git log --stat
4.查看最后一次提交
$ git log -1 HEAD
5.显示最近两周内的提交
$ git log --since=2.weeks
6.把每次提交信息放在一行显示
$ git log --pretty=oneline
7.输出提交历史、各个分支的指向以及项目的分支分叉情况
$ git log --oneline --decorate --graph --all
8.根据format格式输出日志
$ 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
9.显示分支合并历史
$git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of
|\
| * 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
10.查看 Git 仓库中,2008 年 10 月期间,Junio Hamano 提交的但未合并的测试文件
$ git log --pretty="%h - %s" --author=gitster --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
11.显示所有非合并的提交日志
$ git log --no-merges
12.显示v2.6.12版本中include/scsi和drivers/scsi文件夹以及子文件夹下,所有改动的文件
$ git log v2.6.12.. include/scsi drivers/scsi
13.显示文件 gitk 两周内的改动;-- 这个是gitk的前缀,表示gitk是文件或者路径,
不然会导致git分不清gitk是分支名还是文件名
$ git log --since="2 weeks ago" -- gitk
14.显示在test分支但不在release分支的新增、修改、删除文件清单
$ git log --name-status release..test
15.显示builtin/rev-list.c所有改动对应的提交日志
$ git log --follow builtin/rev-list.c
16.查看本地分支且不存在于origin的所有分支提交日志(
$ git log --branches --not --remotes=origin
17.查看本地master分支,不包括所有远程master分支的日志
$ git log master --not --remotes=*/master
18.查看main.c文件中main方法提交的日志
$ git log -L '/int main/',/^}/:main.c
19.查看最近3条提交
$git log -3
20.Shows the history including change diffs, but only from the “main branch” perspective, skipping commits that come from merged branches, and showing full diffs of changes introduced by the merges. This makes sense only when following a strict policy of merging all topic branches when staying on a single integration branch.
$ git log -p -m --first-parent
21.查看合并冲突两个分支给独立提交内容
$ git log --oneline --left-right HEAD...MERGE_HEAD
< f1270f7 update README
< 9af9d3b add a README
< 694971d update phrase to hola world
> e3eb223 add more tests
> 7cff591 add testing script
> c3ffff1 changed text to hello mundo
22.查看两个分支有冲突的提交
$ git log --oneline --left-right --merge
< 694971d update phrase to hola world
> c3ffff1 changed text to hello mundo