学会这三个命令,你就不再是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

相关文章

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

负债不再是障碍?银行信贷“白名单“揭秘

谈及银行信贷产品,常闻有言称存在无需考量负债与查询记录之奇品,此等说法十有八九为中介诱人上钩之辞。轻信之下,恐将步入连环陷阱。除非个人资质出类拔萃,如就职于国央企或事业单位,工龄逾年,五险一金完备,还款能力卓越,或能偶遇线下产品对查询记录稍显宽容,然亦非全然无视。宣称全然不顾者,纯属无稽之谈。 银行非慈善机构,不轻易于困境中援手,更偏爱锦上添花之举。若无坚实资质,即便求助于银行亦难获青睐。反

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus