当前位置: 首页 > 科技观察

学会这三个命令,你就不再是git只会用三板斧的菜鸟了

时间:2023-03-14 20:32:51 科技观察

学会这三个命令,你就不再是只会用git三轴的菜鸟了。介绍gitignore文件的设置方法,方便我们使用gitadd。无需手动区分即可添加我们想要的文件。今天继续介绍git中几个常用且重要的命令,分别是gitdiff和gitlog查看提交历史。gitdiffgitdiff是一个非常有用的命令,很多大牛都用它来查看代码变化,因为它真的很方便。gitdiff命令可以查看当前工作区和暂存区的区别,也就是说可以查看我们已经修改或者添加,但是还没有添加到暂存区的代码。会列出更改前后的对比,方便我们查看和修改。例如,我随机找到一个repo并在不添加任何参数的情况下运行gitdiff。我从结果中截取了一段如下:由于我配置了zsh,所以会高亮显示修改前后的内容对比。例如,在上面的例子中,我们删除了一行并添加了两行。我们可以方便的查看修改前后的变化,从而检查修改的逻辑是否有错误。gitdiff+文件路径当然,如果gitdiff不加任何参数,默认会显示所有文件变化。有时我们改变很多,看起来很累。这时候我们可以加上文件名来查看某个文件的具体变化。例如,上面例子中的变化发生在一个shell文件中。我可以直接运行gitdiffshell/prepare_data.sh,就是shell文件对应的路径,会发现其他的改动是看不到的。前面在gitdiff--cached中有提到,我们看的是工作区(add命令之前)和暂存区的代码在不加任何参数的情况下的区别。如果我们已经添加了所有代码,那么当我们运行gitdiff时它不会显示任何内容。比如我们刚才把仓库里的代码全部提交,然后运行gitdiff。结果如下:可以看到刚才的改动都没有了。这是因为我们已经将代码提交到暂存区了。不加参数时比较的是工作区和暂存区的区别。这个时候,我们又想看看diff。我们要看的是暂存区和本地git仓库的区别,即已经添加但没有提交的变更。这时候我们可以使用--cached参数来实现。在--cached参数之后,我们也可以跟上文件名来查看具体的文件。比如当我们执行gitdiff--cachedshell/prepare_data.sh时,刚才的变化又被显示出来了。其他用途除了刚才说的这些方法,gitdiff还有一些其他的用途。比如也可以比作某个commit和另一个branch。这些命令比较少见,简单列一下:#比较工作区和某次提交的区别gitdiff#比较工作区和某次提交某文件的区别gitdiff#Compare暂存区与某次提交的区别gitdiff--cached#比较暂存区与某次提交的文件的区别gitdiff--cachedgitloggitlog你可能听说过其中,即使你不知道,也不难从名字猜出它的用途,它显示了当前分支上的所有提交。比如我在存放git文章的repo下运行gitlog,可以查看到之前的提交记录:日志中有两条重要的信息,我用红笔高亮了。其中之一是一个长字符串,后跟提交。这是commitid,在git仓库中是唯一的。我们可以用它来锁定提交。比如上面说的gitdiff,是跟某个commit比较的,传入的commitid就是这个。我们不需要复制所有的id,因为它们太长了。其实git有自动补全的功能。我们通常只复制前几位。比如gitdiffdfd55就可以了,git会根据我们输入的数字找到符合条件的commit。一般来说,前几个数字足以锁定一个提交。第二个关键信息是commit信息,也就是我们在每次commit后输入的字符串-m,表示commit中改变了什么。这是开发者写的,也是按键提示。gitlog-p当我们运行gitlog时,它只会显示提交相关的信息,并不会显示每次更改的内容。一个是不必要的,另一个是太多了。但有时我们想看看每次提交中发生了什么变化。通过gitdiff一一查看太麻烦了。这时候可以使用参数来实现。只需在gitlog后加上-p,它就会显示每次提交的变化。其实我们从头部的日志信息也可以看出,底层也是通过gitdiff实现的。由于commit的改动量可能很大,所以我们会看到很多这样的内容。我们可以在-p之后加一个-n表示我们要查看的最后几条commit信息,比如gitlog-p-2就是查看最后两条commit信息。gitlog--stat有时候(比如HR根据代码来判断性能)我们只想看看每次commit做了多少改动,并不想知道具体的改动是什么。这时候,我们可以使用stat参数。它会告诉我们在这次提交中每个文件做了多少修改,这样我们就可以检查具体到文件的修改。gitlog--prettypretty这个参数是个神器,可以支持我们DIY自己想看的日志展示。例如,常用的是gitlog--pretty=oneline。这里的oneline是一种格式,意思是单行显示,即将commit显示的信息压缩成一行。我们可以看到,它省略了作者、时间等信息,只保留了commitid和comment信息。这个一般用在排查问题的时候,想快速找到某个commit。除了oneline,官方还提供了short、full、fuller等其他几种格式。这三者显示的信息略有不同,大家可以自行尝试。最后介绍一下牛叉的一个用法,就是我们自己定义自己想要的输出。比如我想看的日志应该包括commitid、commit时间、作者和评论。那么我们可以自己定义一个格式:%h-%ad-%an-%s。这样,我们执行的命令是:gitlog--pretty=format:"%h-%ad-%an-%s"结果会是:这正是我们想要的,这里的%h和%ad其实都是官方提供的参数,他们分别代表一种信息。例如%h表示短commitid,%ad表示提交时间,%an表示作者信息,%s表示提交时的评论。当然,可选参数不止这些。官方提供了一个表格,可以选择表格中的参数。gitlog的另一个参数用法是--graph,可以显示提交的树状分支结构。它也非常非常好用,但是我找不到合适的repo来展示它,所以我用一个官方的例子给大家展示一下:除了上面介绍的功能,gitlog还有一些其他的功能,分别是比较少见,就不细说了。有兴趣的同学可以查看官方文档,体验一下git命令的强大。总结一下,今天介绍的gitdiff和gitlog命令你学会了吗?是不是有一种看似简单,学起来却相当复杂的感觉?其实很正常,因为git是面向所有开发者的,不同的开发者有不同的习惯,有些人总有自己的特殊需求。所以git也被设计得非常复杂和强大,可以实现各种功能。我们不需要学习所有这些。我们可以根据自己的日常需要,一些重点学习,其他一般性的了解来进行选择。