您的位置:首页 > 其它

GIT LOG 命令

2017-10-27 11:03 169 查看

Git Log 命令

一、参数说明

参数命令说明
onelinegit log –oneline将每次提交记录汇总成一行
Decoratinggit log –oneline –decorate展示commit的关联的分支或者是标签
statgit log –stat显示每次提交中,每个文件加入和删除的行数
pgit log -p显示详细改动
shortloggit shortlog生成发布的通告按提交者名字排序
Graphsgit log –graph –oneline –decorate根据分枝提交历史绘出图像

二、定制命令

命令

git log --pretty=format:"%cn committed %h on %cd"

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit


定义别名

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"


三、过滤

1.根据数量过滤

最基本的过滤就是限制输出的commit个数。如果你只对最近的几次commit感兴趣,就不用讲所有commit历史输出。

使用-参数可以做到这一点。举个例子,下面的命令只输出最近3条提交

git log -3


2. 根据日期过滤

如果想找特定时间段的提交记录,可以使用–after或者是–before参数。这两个参数接受很多种日期格式,举个例子,下面的命令只显示2014年7月1号后的提交

git log --after="2014-7-1"


也可以传入相对的时间概念,像”1 week ago”,或者是”yesterday”

git log --after="yesterday"


如果想找某个时间区间的提交记录,可以同时传入–before和–after参数。

举个例子,可以用下面的命令找到2014年7月1号到4号之间的提交。

git log --after="2014-7-1" --before="2014-7-4"


–since,–until和–after,–before是同义的

3. 按照提交者过滤

如果想找某个开发者提交的commit,可以使用–auther参数,传入一个正则表达式,返回所有符合表达式的开发者提交的commit。如果知道想找的人是谁,直接传入字符也可以

git log --author="John"


上面的命令会筛选出所有名字里包含”John”的作者提交的commit。

也可以用正则来满足更复杂的需求,比如筛选出名字里包含了John和Mary的开发者的提交。

git log --author="John\|Mary"


4. 根据commit信息过滤

使用–grep可以根据commit提交的信息过滤。这个和上面的–author差不多,只不过匹配的是commit信息,比如说可以这样

git log --grep="JRA-224:"


也可以使用-i参数忽略大小写。

5.根据文件过滤

有很多时候,你只对某个文件的改动感兴趣。传入文件路径,就能找到所有和这个文件相关的提交记录,比如,下面的命令会筛出foo.py 和bar.py相关的提交

git log -- foo.py bar.py


– 参数是告诉git log,后面传入的参数是文件路径,而不是分支的名字。如果传入的文件路径不可能是分支名的话,可以省略掉它。

6.根据改动过滤

根据代码中加入或者移除的某一行代码,也能筛选出相应的commit。这个叫做pickaxe,它接受形如-S””的参数。如果你想知道Hello, World!这行代码是何时加入到文件中的,可以使用下面的命令

git log -S"Hello, World!"


如果想查找匹配某个正则表达式的代码,可以传入这样子的参数-G””。

这个功能在debug的时候是很有用的,因为它能够筛选出所有影响某一行代码的提交。它甚至能告诉你这一行代码是什么时候移到另外一个文件中的

7.根据提交范围过滤

可以传入提交的范围来筛选出范围内的commit。范围的格式如下,其中和是指向某个commit

git log <since>..<until>


当传入分支是,这个命令尤其有用。比如展示两个分支的不同,命令如下

git log master..feature


master..feature范围中包含了feature分支中所有不在master分支上的commit。换句话说,是feature分支从master分支上切出来后的进度。如图所示。

注意如果交换顺序(即feature..master),会得到所有不在feature上的master上的commit。

8.过滤Merge信息

git log输出包含merge信息。但是,如果开发组总是把上游分支里的更新mege到feature分支,而不是将feature分支rebase到上游分支,就会在代码库中看到非常多的merge信息。

可以使用–no-merges来过滤掉这个merge信息

git log --no-merges


另一方面,如果只想看到merge信息,可以使用–merges

git log --merges
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git log