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

前言在之前的文章当中我们介绍了最基本的git add、git commit和git push的用法以及基本原理 , 还介绍了gitignore文件的设置方法 , 从而让我们可以使用git add .来添加我们想要的文件 , 而不必要手动区分 。
今天我们继续来介绍几个git当中常用并且重要的命令 , 它们分别是git diff , 查看提交历史的git log 。
git diffgit diff是一个非常好用的命令 , 很多大牛都用它查看代码的改动 , 因为它的确非常方便 。 git diff命令可以查看当前工作区与暂存区的差别 , 也就是说可以查看到当前我们修改或者是添加的 , 但是还没有add进暂存区的代码 。 它会列出改动前后的对比 , 方便我们进行查看和修改 。
比如我随便找了个repo运行了一下git diff , 后面没有加上任何参数 , 我从结果当中截取了一个片段如下:
学会这三个命令,你就不再是git只会用三板斧的菜鸟了文章插图
由于我配置了zsh , 它会高亮显示修改前后的内容对比 。 比如在上面这个例子当中 , 我们删除了一行 , 添加了两行 。 我们可以很方便地查看前后的改动 , 方便我们检查修改的逻辑是否有出错 。
git diff + 文件路径当然git diff如果不加任何参数的话 , 会默认展示所有的文件改动 , 有时候我们改动的量比较大 , 看起来也会比较累 。 这个时候我们可以加上文件名 , 查看一下某一个文件具体的改动 。 比如上面例子当中的改动 , 发生在一个shell文件当中 , 我可以直接运行git diff shell/prepare_data.sh , 也就是这个shell文件对应的路径 , 会发现其他的改动都看不到了 。
学会这三个命令,你就不再是git只会用三板斧的菜鸟了文章插图
git diff --cached前面说了 , 我们在不加任何参数的情况下查看的是工作区(add命令之前)的代码和暂存区的差别 , 如果我们已经把所有代码都add进来了 , 那么当我们运行git diff是不会显示任何东西的 。 比如我们在刚才的仓库先把所有代码提交一下 , 再来运行git diff结果如下:
学会这三个命令,你就不再是git只会用三板斧的菜鸟了文章插图
可以看到刚才所有的改动都没了 , 这是因为我们已经把代码提交到暂存区了 , 不加参数的时候是比较的工作区和暂存区的差别 。 这个时候我们再想看diff , 想看的其实是暂存区和本地git仓库的差别 , 也就是已经add了还没commit的改动 。 这个时候我们可以通过--cached参数来实现 , --cached参数后面同样可以再跟上文件名 , 查看某一个具体的文件 。
比如当我们执行git diff --cached shell/prepare_data.sh之后 , 刚才的改动就又重新展示出来了 。
学会这三个命令,你就不再是git只会用三板斧的菜鸟了文章插图
其他用法【学会这三个命令,你就不再是git只会用三板斧的菜鸟了】除了刚才提到的方法之外 , git diff还有一些其他的用法 。 比如还可以和一个确定的提交 , 另外一个分支进行比较 。 这些命令相对不太常用 , 我们简单列举一下:
# 比较工作区和某一个提交的差别git diff # 比较工作区和某一个提交某一个文件的差别git diff # 比较暂存区和某一个提交的差别git diff --cached # 比较暂存区和某一个提交某一个文件的差别git diff --cached git loggit log大家可能有所耳闻 , 即使没有也不难从名字当中猜出用途 , 它可以展示出当前分支上所有的提交 。
比如当我在存放git文章的repo下运行git log , 就可以查看到之前的提交记录:
学会这三个命令,你就不再是git只会用三板斧的菜鸟了文章插图
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中的改动 。