Gitlog高级用法

Gitlog高级用法

2023年7月10日发(作者:)

Gitlog⾼级⽤法格式化Log输出⾸先,这篇⽂章会展⽰⼏种git log格式化输出的例⼦。⼤多数例⼦只是通过标记向git log请求或多或少的信息。如果你不喜欢默认的git log格式,你可以⽤git config的别名功能来给你想要的格式创建⼀个快捷⽅式。Oneline--oneline标记把每⼀个提交压缩到了⼀⾏中。它默认只显⽰提交ID和提交信息的第⼀⾏。git log --oneline的输出⼀般是这样的:0e25143 Merge branch 'feature'ad8621a Fix a bug in the feature16b36c6 Add a new feature23ad9ad Add the initial code base它对于获得项⽬的总体情况很有帮助。Decorate很多时候,知道每个提交关联的分⽀或者标签很有⽤。--decorate标记让git log显⽰指向这个提交的所有引⽤(⽐如说分⽀、标签等)。这可以和另⼀个配置项⼀起使⽤。⽐如,执⾏git log --oneline --decorate 会将提交历史格式化成这样:0e25143 (HEAD, master) Merge branch 'feature'ad8621a (feature) Fix a bug in the feature16b36c6 Add a new feature23ad9ad (tag: v0.9) Add the initial code base在这个例⼦中,你(通过HEAD标记)可以看到最上⾯那个提交已经被checkout了,⽽且它还是master分⽀的尾端。第⼆个提交有另⼀个feature分⽀指向它,以及最后那个提交带有v0.9标签。分⽀、标签、HEAD还有提交历史是你Git仓库中包含的所有信息。因此,这个命令让你更完整地观察项⽬结构。Diffgit log提供了很多选项来显⽰两个提交之间的差异。其中最常⽤的两个是--stat和-p。--stat选项显⽰每次提交的⽂件增删数量(注意:修改⼀⾏记作增加⼀⾏且删去⼀⾏),当你想要查看提交引⼊的变化时这会⾮常有⽤。⽐如说,下⾯这个提交在⽂件中增加了67⾏,删去了38⾏。commit f2a238924e89ca1d4947662928218a06d39068c3Author: John Date: Fri Jun 25 17:30:28 2014 -0500 Add a new feature | 105 ++++++++++++++++++++++++----------------- 1 file changed, 67 insertion(+), 38 deletions(-)⽂件名后⾯+和-的数量是这个提交造成的更改中增删的相对⽐例。它给你⼀个直观的感觉,关于这次提交有多少改动。如果你想知道每次提交删改的绝对数量,你可以将-p 选项传⼊git log 。这样提交所有的删改都会被输出:commit 16b36c697eb2d24302f89aa22d9170dfe609855bAuthor: Mary Date: Fri Jun 25 17:31:57 2014 -0500 Fix a bug in the featurediff --git a/ b/673b40 100644--- a/+++ b/@@ -13,14 +13,14 @@ B-print("Hello, World!")+print("Hello, Git!")对于改动很多的提交来说,这个输出会变得⼜长⼜⼤。⼀般来说,当你输出所有删改的时候,你是想要查找某⼀具体的改动,这时你就要⽤到pickaxe 选项。Shortloggit shortlog是⼀种特殊的git log ,它是为创建发布声明设计的。它把每个提交按作者分类,显⽰提交信息的第⼀⾏。这样可以容易地看到谁做了什么。⽐如说,两个开发者为项⽬贡献了5个提交,那么git shortlog 输出会是这样的:Mary (2): Fix a bug in the feature Fix a serious security hole in our frameworkJohn (3): Add the initial code base Add a new feature Merge branch 'feature'默认情况下,git shortlog把输出按作者名字排序,但你可以传⼊-n选项来按每个作者提交数量排序。Graph--graph 选项绘制⼀个ASCII图像来展⽰提交历史的分⽀结构。它经常和

--oneline和

--decorate两个选项⼀起使⽤,这样会更容易查看哪个提交属于哪个分⽀:git log --graph --oneline --decorateFor a simple repository with just 2 branches, this will produce the following:* 0e25143 (HEAD, master) Merge branch 'feature'|

| * 16b36c6 Fix a bug in the new feature| * 23ad9ad Start a new feature* | ad8621a Fix a critical security issue|/

* 400e4b7 Fix typos in the documentation* 160e224 Add the initial code base星号表明这个提交所在的分⽀,所以上图的意思是23ad9ad和16b36c6这两个提交在topic分⽀上,其余的在master分⽀上。虽然这对简单的项⽬来说是个很好⽤的选择,但你可能会更喜欢gitk或SourceTree这些更强⼤的可视化⼯具来分析⼤型项⽬。⾃定义格式对于其他的git log格式需求,你都可以使⽤--pretty=format:""选项。它允许你使⽤像printf⼀样的占位符来输出提交。⽐如,下⾯命令中的%cn、%h 和%cd这三种占位符会被分别替换为作者名字、缩略标识和提交⽇期。git log --pretty=format:"%cn committed %h on %cd"This results in the following format for each commit:John committed 400e4b7 on Fri Jun 24 12:30:04 2014 -0500John committed 89ab2cf on Thu Jun 23 17:09:42 2014 -0500Mary committed 180e223 on Wed Jun 22 17:21:19 2014 -0500John committed f12ca28 on Wed Jun 22 13:50:31 2014 -0500完整的占位符清单可以在⽂档中找到。除了让你只看到关注的信息,这个--pretty=format:"" 选项在你想要在另⼀个命令中使⽤⽇志内容是尤为有⽤的。过滤提交历史格式化提交输出只是git log其中的⼀个⽤途。另⼀半是理解如何浏览整个提交历史。接下来的⽂章会介绍如何⽤git log选择项⽬历史中的特定提交。所有的⽤法都可以和上⾯讨论过的格式化选项结合起来。按数量git log最基础的过滤选项是限制显⽰的提交数量。当你只对最近⼏次提交感兴趣时,它可以节省你⼀页⼀页查看的时间。你可以在后⾯加上-选项。⽐如说,下⾯这个命令会显⽰最新的3次提交:git log -3按⽇期如果你想要查看某⼀特定时间段内的提交,你可以使⽤--after 或

--before 标记来按⽇期筛选。它们都接受好⼏种⽇期格式作为参数。⽐如说,下⾯的命令会显⽰2014年7⽉1⽇后(含)的提交:git log --after="2014-7-1"你也可以传⼊相对的⽇期,⽐如⼀周前("1 week ago")或者昨天("yesterday"):get log --after="yesterday"你可以同时提供--before 和

--after 来检索两个⽇期之间的提交。⽐如,为了显⽰2014年7⽉1⽇到2014年7⽉4⽇之间的提交,你可以这么写:git log --after="2014-7-1" --before="2014-7-4"注意--since 、--until 标记和--after 、--before标记分别是等价的。按作者当你只想看某⼀特定作者的提交的时候,你可以使⽤--author标记。它接受正则表达式,返回所有作者名字满⾜这个规则的提交。如果你知道那个作者的确切名字你可以直接传⼊⽂本字符串:git log --author="John"它会显⽰所有作者叫John的提交。作者名不⼀定是全匹配,只要包含那个⼦串就会匹配。你也可以⽤正则表达式来创建更复杂的检索。⽐如,下⾯这个命令检索名叫Mary或John的作者的提交。git log --author="John|Mary"注意作者的邮箱地址也算作是作者的名字,所以你也可以⽤这个选项来按邮箱检索。如果你的⼯作流区分提交者和作者,--committer也能以相同的⽅式使⽤。按提交信息按提交信息来过滤提交,你可以使⽤--grep标记。它和上⾯的--author标记差不多,只不过它搜索的是提交信息⽽不是作者。⽐如说,你的团队规范要求在提交信息中包括相关的issue编号,你可以⽤下⾯这个命令来显⽰这个issue相关的所有提交:git log --grep="JRA-224:"你也可以传⼊-i参数来忽略⼤⼩写匹配。按⽂件很多时候,你只对某个特定⽂件的更改感兴趣。为了显⽰某个特定⽂件的历史,你只需要传⼊⽂件路径。⽐如说,下⾯这个命令返回所有和和⽂件相关的提交:git log -- --告诉git log接下来的参数是⽂件路径⽽不是分⽀名。如果分⽀名和⽂件名不可能冲突,你可以省略--。按内容我们还可以根据源代码中某⼀⾏的增加和删除来搜索提交。这被称为pickaxe,它接受形如-S""的参数。⽐如说,当你想要知道Hello,World!字符串是什么时候加到项⽬中哪个⽂件中去的,你可以使⽤下⾯这个命令:git log -S "Hello, World!"如果你想⽤正则表达式⽽不是字符串来搜索,你可以使⽤-G""标记。这是⼀个⾮常强⼤的调试⼯具,它能让你定位到所有影响代码中特定⼀⾏的提交。它甚⾄可以让你看到某⼀⾏是什么时候复制或者移动到另⼀个⽂件中去的。按范围你可以传⼊范围来筛选提交。这个范围由下⾯这样的格式指定,其中是提交的引⽤:git log ..这个命令在你使⽤分⽀引⽤作为参数时特别有⽤。这是显⽰两个分⽀之间区别最简单的⽅式。看看下⾯这个命令:git log master..feature其中的master..feature范围包含了在feature分⽀⽽不在master分⽀中所有的提交。换句话说,这个命令可以看出从master分⽀fork到feature分⽀后发⽣了哪些变化。它可以这样可视化:注意如果你更改范围的前后顺序(aster),你会获取到master分⽀⽽⾮feature分⽀上的所有提交。如果git log输出了全部两个分⽀的提交,这说明你的提交历史已经分叉了。过滤合并提交git log输出时默认包括合并提交。但是,如果你的团队采⽤强制合并策略(意思是merge你修改的上游分⽀⽽不是将你的分⽀rebase到上游分⽀),你的项⽬历史中会有很多外来的提交。你可以通过--no-merges标记来排除这些提交:git log --no-merges另⼀⽅⾯,如果你只对合并提交感兴趣,你可以使⽤--merges标记:git log --merges它会返回所有包含两个⽗节点的提交。总结你现在应该对使⽤git log来格式化输出和选择你要显⽰的提交的⽤法⽐较熟悉了。它允许你查看你项⽬历史中任何需要的内容。这些技巧是你Git⼯具箱中重要的部分,不过注意git log往往和其他Git命令连着使⽤。当你找到了你要的提交,你把它传给git checkout 、gitrevert 或是其他控制提交历史的⼯具。所以,请继续坚持Git⾼级⽤法的学习。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688987902a192030.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信