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