今天是Git系列课程第三课,前两课我们都是在做Git仓库准备工作,今天痞子衡要讲的是如何查看Git空间内发生的改动。

  本地有了仓库,我们便可以在仓库所在目录下做文件增删改操作,为了确定改动操作的正确性,我们需要实时查看这些改动状态,有两种查看方式git status和git diff,痞子衡为大家逐一介绍:

1.查看Git空间文件改动状态git status

  前面讲过Git空间内文件改动有4种状态,除了Unmodified状态的文件因为并未改动默认没有状态不做显示之外,其他文件改动状态都可以通过git status来查看。让我们开始在工作区创建3个文件:main.c、test.c、dummy.c

  dummy.c(路径:/gittest/app/dummy.c)为空白文件。

  test.c(路径:/gittest/app/test.c)文件内容如下:

#include <stdio.h>
#include <stdlib.h>
void test(void)
{
printf("this is test\n");
}

  main.c(路径:/gittest/main.c)文件内容如下:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("hello world\n");
return 0;
}

  为了使改动类型更加丰富一点,我们在已存在Git本地&远程仓库的README.md文件中增加一行内容"# first update"。我们来看看Git记录的状态,从下面结果可知,新增的3个文件在Git空间里都属于Untracked文件,存放在工作区内。READMED.md文件的改动处于Modified状态,也存放在工作区。

jay@pc MINGW64 /d/my_project/gittest (master)

$ git status

On branch master
Your branch is up to date with 'origin/master'. Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: README.md Untracked files:
(use "git add <file>..." to include in what will be committed) app/
main.c no changes added to commit (use "git add" and/or "git commit -a")

2.查看Git空间文件具体改动git diff

  git status只能让我们知道文件在Git空间内的改动状态,但如果我们想查看某个文件内具体改了什么(也可以理解为在不同Git空间中的差异),此时需要用git diff命令。

  对于main.c文件,由于是新增的文件,其只存在于工作区,且处于Untracked状态,Git认为无论是哪两个Git空间之间的比对都没有意义,得到的结果是没有区别。

  而对于README.md文件,由于已经被提交到仓库了,处于Git管理中,所以这个文件同时存在于三个Git空间(工作区,暂存区,仓库),我们在工作区内对其进行了文件改动,无论是比对工作区vs暂存区或者工作区vs仓库,得到的结果应该都是README.md文件里的具体变化内容。而如果比对暂存区vs仓库,得到的结果也应该是没有区别。

2.1查看文件当前变动(工作区vs暂存区)git diff [file path]

// 查看main.c得不到任何结果

jay@pc MINGW64 /d/my_project/gittest (master)

$ git diff main.c

// 查看README.md可看到文件具体变化

jay@pc MINGW64 /d/my_project/gittest (master)

$ git diff README.md

diff --git a/README.md b/README.md
index 92eca93..229dc5f 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
# gittest
+# first update

2.2查看文件跨越变动(工作区vs仓库)git diff [commit] [file path]

  由于gittest仓库目前只有一次提交,所以此处commit只能是HEAD,只能与上一次提交对比,得到的结果与2.1是一致的。为了充分展示这个功能,我们将此次的README.md的改动先提交到仓库。

jay@pc MINGW64 /d/my_project/gittest (master)

$ git add README.md

jay@pc MINGW64 /d/my_project/gittest (master)

$ git commit -m "second commit"

[master aa9db9d] second commit
1 file changed, 1 insertion(+)

jay@pc MINGW64 /d/my_project/gittest (master)

$ git fetch

jay@pc MINGW64 /d/my_project/gittest (master)

$ git rebase

First, rewinding head to replay your work on top of it...
Applying: second commit

jay@pc MINGW64 /d/my_project/gittest (master)

$ git push

Counting objects: 3, done.
Writing objects: 100% (3/3), 276 bytes | 276.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:JayHeng/gittest.git
5fe04f8..867df08 master -> master

  然后对README.md再修改一次增加新一行内容"# second update"。现在我们再来查看README.md跨级变动(HEAD表示是最近一次commit,HEAD^表示上一次commit,HEAD~100表示上100次commit):

// 查看README.md与最近一次commit的变化(等同于当前变化)

jay@pc MINGW64 /d/my_project/gittest (master)

$ git diff HEAD README.md

diff --git a/README.md b/README.md
index 229dc5f..db5442d 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
# gittest
# first update
+# second update

// 查看README.md与上一次commit的变化(等同于2次变化的汇总)

jay@pc MINGW64 /d/my_project/gittest (master)

$ git diff HEAD^ README.md

diff --git a/README.md b/README.md
index 92eca93..db5442d 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
# gittest
+# first update
+# second update

  对于README.md文件的第二次改动仅是用于演示跨越变动对比的功能,为不影响后续讲解,我们现在将这个变动恢复(文件编辑器打开文件,直接删除"# second update")。

2.3查看文件历史变更(仓库vs仓库)git diff [commit] [commit]

  gittest仓库目前已有2次提交,让我们直接比对这两次提交。Note:Git每次commit都会产生一个唯一ID(SHA-1号)用于记录这个commit,可在git commit/git push命令的返回结果里看到。

jay@pc MINGW64 /d/my_project/gittest (master)

$ git diff 5fe04f8 867df08

diff --git a/README.md b/README.md
index 92eca93..229dc5f 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
# gittest
+# first update

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:第一本Git命令教程(3)- 变动(status/diff)的更多相关文章

  1. 痞子衡嵌入式:第一本Git命令教程(0)- 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家讲的是Git命令汇编,共12篇文章,循序渐进地介绍Git操作的完整过程. 在开始Git课程之前,需要先跟大家普及2个重要概念(四度空间.四种状 ...

  2. 痞子衡嵌入式:第一本Git命令教程(7.1)- 清理之缓存(stash)

    今天是Git系列课程第七课,上一课我们学会了查看Git本地历史提交,今天痞子衡要讲的是Git仓库的清理操作,一共4个命令,都是日常开发中非常实用的命令,掌握这4个命令,会让你有一种玩弄Git仓库于股掌 ...

  3. 痞子衡嵌入式:第一本Git命令教程(1)- 准备(init/config/.gitignore)

    今天是Git系列课程第一课,痞子衡给大家要讲的是创建仓库的准备工作. 1.建仓库git init 第一步是创建一个空仓库,这是一切操作的前提. // 打开git bash命令行,切换到指定目录下 ja ...

  4. 痞子衡嵌入式:第一本Git命令教程(4)- 转移(add/rm/mv)

    今天是Git系列课程第四课,上一课我们在Git空间里做了一些文件改动并且知道了如何利用Git查看这些变动,今天痞子衡要讲的是将这些变动提交到Git本地仓库前的准备工作. Git仓库目录下的文件改动操作 ...

  5. 痞子衡嵌入式:第一本Git命令教程(5)- 提交(commit/format-patch/am)

    今天是Git系列课程第五课,上一课我们做了Git本地提交前的准备工作,今天痞子衡要讲的是Git本地提交操作. 当我们在仓库工作区下完成了文件增删改操作之后,并且使用git add将文件改动记录在暂存区 ...

  6. 痞子衡嵌入式:第一本Git命令教程(6)- 日志(log/reflog/gitk)

    今天是Git系列课程第六课,上一课我们学会了Git本地提交,今天痞子衡要讲的是如何查看Git本地历史提交. 当我们在仓库里做了很多次提交之后,免不了需要回看提交记录,看看自己之前的改动.有三种Git命 ...

  7. 痞子衡嵌入式:第一本Git命令教程(2)- 连接(remote/clone)

    今天是Git系列课程第二课,上一课我们已经学会在本地创建一个空仓库,痞子衡今天要讲的是如何将本地仓库与远程建立联系. 1.将本地仓库挂上远程git remote 本地建好了仓库,我们希望能够挂到远程服 ...

  8. 痞子衡嵌入式:超级下载算法RT-UFL v1.0发布,附J-Link下安装教程

    痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> 历时 8 个月终于迎来了 v1.0 版发布,因为是第一个正式版,为了保证质 ...

  9. 痞子衡嵌入式:超级好用的可视化PyQt GUI构建工具(Qt Designer)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是PyQt GUI构建工具Qt Designer. 痞子衡开博客至今已有好几年,一直以嵌入式开发相关主题的文章为主线,偶尔穿插一些其他技术 ...

随机推荐

  1. HTTP 报文格式

    (a)GET,POST,PUT(更新)DELETE(删除) 首行中,请求报文只需包含路由,因为在发送请求前,tcp连接已经创建,协议版本 Header: 接收类型 (b)版本 + 状态码 Header ...

  2. tf.contrib.slim add_arg_scope

    上一篇文章中我们介绍了arg_scope函数,它在每一层嵌套中update当前字典中参数形成新的字典,并入栈.那么这些参数是怎么作用到代码块中的函数的呢?比如说如下情况: with slim.arg_ ...

  3. 移动UI框架

    ---恢复内容开始--- 一,框架使用selenium+appium+po+unittest+python 1.其中po表示居于page of boject的思想,unittest是单元测试框架 2. ...

  4. 封装axios

    import axios from 'axios' // import store from '@/vuex/store.js' import router from '../router' impo ...

  5. MySQL5.6启用sha256_password插件

    一.背景: 使用MySQL5.6过程中,发现默认的加密插件为mysql_native_password.而sha256_password的安全程度要比mysql_native_password高,尝试 ...

  6. zstd --压缩工具

    Zstandard (也被称为zstd )是一款免费的开源,快速实时数据压缩程序,具有更好的压缩比 (约为 10:1). 安装 yum group install "Development ...

  7. 微信小程序开发---视图层(View)

    WXML WXML能力: 数据绑定 列表渲染 条件渲染 模板 事件 数据绑定 数据绑定使用 Mustache 语法(双大括号)将变量包起来,可作用于内容,组件属性(需要在双引号之内),控制属性(需要在 ...

  8. Pyinstaller (python打包为exe文件)

    需求分析: python脚本如果在没有安装python的机器上不能运行,所以将脚本打包成exe文件,降低脚本对环境的依赖性,同时运行更加迅速. 当然打包的脚本似乎不是在所有的win平台下都能使用,wi ...

  9. python 中间件

    中间件一.什么是中间件 中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django 的输入和输出.每个中间件组件都负责做一些特定的功 ...

  10. python MVC、MTV 框架介绍 Django 模板系统常用语法

    Django 框架简介一.MVC框架和MTV框架1.MVC 全名Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分.优势: 耦合性低 重用性高 生命 ...