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

2024-03-21 14:08

本文主要是介绍学会这三个命令,你就不再是git只会用三板斧的菜鸟了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

在之前的文章当中我们介绍了最基本的git add、git commit和git push的用法以及基本原理,还介绍了gitignore文件的设置方法,从而让我们可以使用git add .来添加我们想要的文件,而不必要手动区分。

今天我们继续来介绍几个git当中常用并且重要的命令,它们分别是git diff,查看提交历史的git log。

git diff

git diff是一个非常好用的命令,很多大牛都用它查看代码的改动,因为它的确非常方便。git diff命令可以查看当前工作区与暂存区的差别,也就是说可以查看到当前我们修改或者是添加的,但是还没有add进暂存区的代码。它会列出改动前后的对比,方便我们进行查看和修改。

比如我随便找了个repo运行了一下git diff,后面没有加上任何参数,我从结果当中截取了一个片段如下:

由于我配置了zsh,它会高亮显示修改前后的内容对比。比如在上面这个例子当中,我们删除了一行,添加了两行。我们可以很方便地查看前后的改动,方便我们检查修改的逻辑是否有出错。

git diff + 文件路径

当然git diff如果不加任何参数的话,会默认展示所有的文件改动,有时候我们改动的量比较大,看起来也会比较累。这个时候我们可以加上文件名,查看一下某一个文件具体的改动。比如上面例子当中的改动,发生在一个shell文件当中,我可以直接运行git diff shell/prepare_data.sh,也就是这个shell文件对应的路径,会发现其他的改动都看不到了。

git diff --cached

前面说了,我们在不加任何参数的情况下查看的是工作区(add命令之前)的代码和暂存区的差别,如果我们已经把所有代码都add进来了,那么当我们运行git diff是不会显示任何东西的。比如我们在刚才的仓库先把所有代码提交一下,再来运行git diff结果如下:

可以看到刚才所有的改动都没了,这是因为我们已经把代码提交到暂存区了,不加参数的时候是比较的工作区和暂存区的差别。这个时候我们再想看diff,想看的其实是暂存区和本地git仓库的差别,也就是已经add了还没commit的改动。这个时候我们可以通过–cached参数来实现,–cached参数后面同样可以再跟上文件名,查看某一个具体的文件。

比如当我们执行git diff --cached shell/prepare_data.sh之后,刚才的改动就又重新展示出来了。

其他用法

除了刚才提到的方法之外,git diff还有一些其他的用法。比如还可以和一个确定的提交,另外一个分支进行比较。这些命令相对不太常用,我们简单列举一下:

# 比较工作区和某一个提交的差别
git diff <commitid># 比较工作区和某一个提交某一个文件的差别
git diff <commitid> <filepath># 比较暂存区和某一个提交的差别
git diff --cached <commitid># 比较暂存区和某一个提交某一个文件的差别
git diff --cached <commitid> <filepath>

git log

git log大家可能有所耳闻,即使没有也不难从名字当中猜出用途,它可以展示出当前分支上所有的提交。

比如当我在存放git文章的repo下运行git log,就可以查看到之前的提交记录:

log当中有两处比较重要的信息,我都用红笔高亮了出来。其中一个是commit后面跟着的一长串,这个是commit id,它在git仓库当中是唯一的,我们可以用它来锁定一个commit。比如刚才上面提到的git diff和某一个commit比较,传入的commitid就是这个。

我们没必要复制全部的id,因为太长了,实际上git有自动补全功能,我们一般复制前面几位就可以了。比如git diff dfd55就足够了,git会根据我们输入的几位查找到符合条件的commit,一般来说前几位就足够锁定一个commit了。

第二个关键信息就是提交信息,也就是我们每次commit -m之后后面输入的字符串,也就是表示这个commit当中的改动改动了什么,这个是开发者写的,也是比较关键的提示信息。

git log -p

当我们运行git log的时候只会展示提交相关的信息,是不会把每一次改动的内容都展示出来的,一则没有必要,二则未免太多了。但是有的时候我们会希望看到每一个commit当中改动的究竟是什么,如果通过git diff一个一个查看也太麻烦了。这个时候就可以用上参数来实现这点,只需要在git log后面加上-p,它就会展示出每一个commit中的改动

其实我们从头部的日志信息也可以看得出来,它底层也是通过git diff实现的。由于commit当中的改动量可能很大,所以我们这样查看到的内容也会非常多。我们可以在-p后面再加上一个-n表示我们想要查看的最近几条commit信息,比如git log -p -2查看的就是最近两条提交信息。

git log --stat

有的时候(比如HR根据代码确定绩效)我们只是想要查看每一次commit到底有多少改动量,而不想知道具体的改动是什么,这个时候就可以使用stat参数。

它会告诉我们这个commit中每一个文件做的改动有多少,方便我们查看具体到文件的变更。

git log --pretty

pretty这个参数是一个神器,它可以支持让我们自己diy我们想要看到的log展示。比如常用的是git log --pretty=oneline,这里的oneline是一种格式,表示单行展示,也就是会把commit展示的信息压缩成一行。

我们可以看到它省略了author、时间等信息,仅仅保留了commitid和comment信息。这种一般用在排查问题的时候,想要快速找到某一个commit。除了oneline之外,官方还提供了其他几种format,比如short、full、fuller这三种,这三者展示的信息略有差别,大家可以自行尝试一下。

最后介绍一种牛叉的用法,就是我们自己来定义我们想要的输出结果。举个例子,比如我想要看到的log日志当中应该包含commitid,提交时间,作者以及comment。那么我们就可以自己定义出一种格式:%h - %ad - %an - %s。这样我们执行的命令就是:

git log --pretty=format:"%h - %ad - %an - %s"

得到的结果会是:

这正是我们想要的,这里的%h, %ad其实也是官方提供的参数,他们分别表示一种信息。比如%h表示短commitid,%ad表示提交时间,%an表示作者信息,%s表示提交时的comment。当然可选的参数不止这些,官方提供了一个表格,表格当中的参数都可以选择。

git log还有一种参数的用法是–graph,可以展示出提交的一个树形分支结构。也是非常非常好用的,但是我找不到合适的repo展示,所以用一个官方的例子展示给大家:

除了上面介绍的功能之外,git log还有一些其他的功能,相对来说不是很常用,就不赘述了。感兴趣的同学可以去查看一下官方文档,体会一下git命令的强大。

总结

怎么样,今天介绍的git diff和git log命令都学会了吗,是不是有一种看起来简单其实学起来还挺复杂的感觉?其实是非常正常的,因为git是面向所有开发者的,不同的开发者有不同的习惯,总有些人有些自己特殊的需求。所以git也就被设计的非常复杂和强大,可以实现各种功能,我们也没必要全部学会,根据日常的需要进行取舍,一部分重点学习,其他的泛泛了解即可。

衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、关注、转发

原文链接,求个关注

在这里插入图片描述

这篇关于学会这三个命令,你就不再是git只会用三板斧的菜鸟了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832843

相关文章

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大