git log 查找、过滤

1.git在日志中查找这个文件.

git log --pretty=oneline --branches -- 文件名
或
git log --pretty=oneline --branches -- 文件夹名

注意:--后和文件(夹)名前,必须要有空格



筛选参数 [注]


1)按数量

-n:显示前n条提交信息。


2)按日期

--after=

比如: git log --after="2014-7-1”,显示2014年7月1号之后的commit(包含7月1号)。

后边的日期还可以用相对时间表示,
比如: "1 week ago"和”yesterday",
又比如: git log --after="yesterday"

--before=:同上。

另外这两条命令可以同时使用表示时间段,比如git log --after="2014-7-1" --before="2014-7-4"文章来源地址:https://www.yii666.com/article/207474.html?action=onAll

同理:--since、--until和--after、--before是一个意思。

--since, --after:仅显示指定时间之后的提交。文章来源地址https://www.yii666.com/article/207474.html?action=onAll

--until, --before:仅显示指定时间之前的提交。

日期范围:

git log --since="2023-01-01" --until="2023-02-01"


3)按作者和提交者

--author=:仅显示作者匹配指定字符串的提交。

比如: git log --author=“John",显示John贡献的commit。

注意:作者名不需要精确匹配,只需要包含就行了。

而且可以使用正则表达式,比如: git log --author="John|Mary”,搜索Marry和John贡献的commit。

而且这个 --author 不仅包含作者名,还包含作者的email,所以你可以用这个搜索email。

--committer:仅显示提交者匹配指定字符串的提交。


4)按commit描述

--grep=:仅显示提交说明中包含指定字符串的提交。

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

而且可以传入-i用来忽略大小写。

注意:如果想同时使用--grep和--author,必须在附加一个--all-match参数。


5)按文件

--(空格)文件或--[后边没有文件]

有时你可能只对某个文件的修改感兴趣,或你只想查看跟某个文件相关的历史信息,

你只需要插入你感兴趣文件的路径,[对,是路径,所以经常是不太好用]就可以了。

比如:git log -- foo.py bar.py ,只返回和foo.py文件或bar.py文件的相关commit。

这里的--是告诉Git,后面的参数是文件路径而不是branch(分支)的名字。

如果后面的文件路径不会和某个branch产生混淆,你可以省略--,
比如: git log foo.py

另外,后边的路径还支持正则,

比如:git log *install.md ,是指定项目路径下的所有以 install.md 结尾文件的提交历史。

另外,文件名应该放到参数的最后位置,通常在前面加上--并用空格隔开表示是文件。

另外,git log file/,可以查看file文件夹下所有文件的提交记录。


6)按分支

--:

--branchName

branchName参数:为任意一个分支名字,查看某个分支上的提交记录。
需要放到参数中的最后位置处。

如果分支名与文件名相同,系统会提示错误,可通过--选项,来指定给定的参数,是分支名还是文件名。

比如:在当前分支中有一个名为v1的文件,同时还存在一个名为v1的分支。如下:

git log v1 --,此时的v1代表的是分支名字(--后边是空的)。

git log -- v1,此时的v1代表的是名为v1的文件。

git log v1 -- v1:代表v1分支下的v1文件。


7)按内容https://www.yii666.com/

-S""、-G"":仅显示添加或删除内容匹配指定字符串的提交。

有时你想搜索,新增或删除某行代码相关的commit. 可以使用这条命令。

假设你想知道Hello,World!这句话,是什么时候加入到项目里去的,

可以用:git log -S"Hello,World!"

另外,如果你想使用正则表达式去匹配,而不是字符串,那么你可以使用-G代替-S。

这是一个非常有用的debug工具,使用他可以定位所有跟某行代码相关的commit,甚至可以查看某行是什么时候被copy的,什么时候移到另外一个文件中去的。

注意:-S后没有"=",与查询内容之间也没有空格符。


8)按范围

git log <since>..<until>

这个命令可以查看某个范围的commit。

这个命令非常有用当你使用branch做为range参数的时候. 能很方便的显示2个branch(分支)之间的不同。

比如:git log master..feature ,master..feature 这个 range(范围),包含了在feature分支存在,而在master分支没有的所有commit。

同样,如果是 feature..master ,意思是包含所有master分支有,但是feature分支没有的commit。

另外,如果是三个点,表示或的意思:git log master...test,意思是查询master或test分支中的提交记录。


9)过滤掉merge commit

--no-merges:

默认情况下git log会输出merge commit(合并提交)。

你可以通过--no-merges标记来过滤掉merge commit,例如:git log --no-merges

另外,如果你只对merge commit感兴趣可以使用 --merges 参数,例如:git log --merges


10)按标签tag

git log v1.0:

直接这样是查询标签之前的commit。
加两个点,例如:git log v1.0.. ,是查询从v1.0以后的提交历史记录(不包含v1.0)。


11)按commit

查询commit之前的记录,包含commit。

git log commit

查询commit1与commit2之间的记录,包括commit1和commit2

git log commit1 commit2

同上,但是不包括commit1

git log commit1..commit2

说明:

其中,commit可以是提交哈希值的简写模式,也可以使用 HEAD 代替。

HEAD 代表最后一次提交,

HEAD^ 为最后一个提交的父提交,等同于HEAD~1。

HEAD~2 代表倒数第二次提交。




参考:
https://www.yii666.com/blog/330372.html?action=onAll
https://blog.csdn.net/huanglu0314/article/details/131157396



posted @ 2023-07-05 11:01  悟透  阅读(2382)  评论(0编辑  收藏  举报