Git学习之版本比较


Git学习之版本比较



前面我们学习了Git操作文件的状态,但使用git status命令输出信息过于简洁,我们想要知道文件具体变化了哪些内容,有没有什么办法呢,有办法,这就是git diff命令。使用这个命令可以参看当前做的哪些更新还没有暂存? 有哪些更新已经暂存起来准备好了下次提交?

1. 首先我们先做些准备工作,我们创建一个名为 hello 的工作空间,然后在这个目录下添加有一个名为README.md的文件,然后输入信息:
学习Git之版本控制

我们将这个文件添加到在暂存区,并提交

breeziness@DESKTOP-5TFSF7M MINGW64 ~/Desktop/hello (master)
$ git add README.md

breeziness@DESKTOP-5TFSF7M MINGW64 ~/Desktop/hello (master)
$ git commit -m"first commit"
[master (root-commit) 52eeaf5] javabean
 1 file changed, 49 insertions(+)
 create mode 100644 README.md


2. 然后我们修改README.md文件的内容:
学习Git之版本控制
我们修改了这个文件
  • 比较暂存区和工作区

直接运行git diff是比较暂存区和工作区的文件:
diff1
我们分析下输出结果:

  • 第一行diff --git a/README.md b/README.md

    a/README.md暂存区README.md文件,b/README.md工作区README.md文件

  • 第二行index 1a96e61..a637524 100644

    表示对应文件的 ID 分别是 7966837472a180左边暂存区域,后边当前目录。最后的100644是Linux下的权限,(如下图)

	The following flags are defined for the st_mode field:
S_IFMT     0170000   bit mask for the file type bit fields
S_IFSOCK   0140000   socket
S_IFLNK    0120000   symbolic link
S_IFREG    0100000   regular file
S_IFBLK    0060000   block device
S_IFDIR    0040000   directory
S_IFCHR    0020000   character device
S_IFIFO    0010000   FIFO
S_ISUID    0004000   set UID bit
S_ISGID    0002000   set-group-ID bit (see below)
S_ISVTX    0001000   sticky bit (see below)
S_IRWXU    00700     mask for file owner permissions
S_IRUSR    00400     owner has read permission
S_IWUSR    00200     owner has write permission
S_IXUSR    00100     owner has execute permission
S_IRWXG    00070     mask for group permissions
S_IRGRP    00040     group has read permission
S_IWGRP    00020     group has write permission
S_IXGRP    00010     group has execute permission
S_IRWXO    00007     mask for permissions for others (not in group)
S_IROTH    00004     others have read permission           
S_IWOTH    00002     others have write permission
S_IXOTH    00001     others have execute permission
  • 第三行 --- a/README.md
    — 表示该文件是旧文件(存放在暂存区域)
  • 第四行 +++ b/README.md
    +++ 表示该文件是新文件(存放在工作区域)
  • 第五行 @@ -1 +1,2 @@
    以 @@ 开头和结束,中间的“-”表示旧文件,“+”表示新文件,后边的数字表示“开始行号,显示行数”
  • 第六行、第七行
    diff1
    这是合并了两个文件(a 和 b)的内容,灰色的表示两个文件共有的内容,绿色表示是新文件的内容,这里我们就可以解答上面第五行的内容,-1是暂存区的旧文件,+1是工作区的新文件,+1,2表示新文件从第一行看是显示,共两行,而旧文件后面没有数字表示它的内容已经完全包含在合并的文件中,没有自己特有的内容。如果这个命令输出的内容很多可以使用linux的跳转命令,同时还可以使用其他的linux的命令,如搜索,退出,移动,帮助等。

  • 比较仓库中的两个快照

如果我们已经提交了多次内容到仓库,那么仓库中就存在多个版本快照,我们可以使用git diff <快照1> <快照2>比较任意两个快照之间的差异,目前仓库存在两个快照:
flash
注意那个commit ID 这是经过SHA-1 检验生成的唯一ID,我们可以输出它的前几位,Git就会帮我们补全后面的部分,这样我们就可以通过这个ID区分快照,或者说每一次操作,现在我们比较下这两个快照。
flash2
分析方法跟前面的方法一样

  • 比较暂存区域和 Git 仓库快照

首先我们先将我们修改的最新版本添加到暂存区,使用git add README.md,现在三棵树状态如图:
在这里插入图片描述
暂存区跟工作区是同步的,是最新版。而仓库是上一版本
我们使用git diff --cached命令可以查看暂存区和仓库的快照的区别
在这里插入图片描述
这里还可以查看任意快照跟暂存区的区别,只要再命令后面加上指定的快照ID,如
git diff --cached de92970

总结的关系如下:

在这里插入图片描述

学习之小甲鱼Git教程和查阅Git手册
作者水平有限,以学习目的,出错联系邮箱 breezinss123@Outlook.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坂田民工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值