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是比较暂存区和工作区的文件:
Git学习之版本比较_第1张图片
我们分析下输出结果:

  • 第一行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 @@
    以 @@ 开头和结束,中间的“-”表示旧文件,“+”表示新文件,后边的数字表示“开始行号,显示行数”
  • 第六行、第七行
    Git学习之版本比较_第2张图片
    这是合并了两个文件(a 和 b)的内容,灰色的表示两个文件共有的内容,绿色表示是新文件的内容,这里我们就可以解答上面第五行的内容,-1是暂存区的旧文件,+1是工作区的新文件,+1,2表示新文件从第一行看是显示,共两行,而旧文件后面没有数字表示它的内容已经完全包含在合并的文件中,没有自己特有的内容。如果这个命令输出的内容很多可以使用linux的跳转命令,同时还可以使用其他的linux的命令,如搜索,退出,移动,帮助等。

  • 比较仓库中的两个快照

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

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

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

总结的关系如下:

Git学习之版本比较_第7张图片

学习之小甲鱼Git教程和查阅Git手册
作者水平有限,以学习目的,出错联系邮箱 [email protected]

你可能感兴趣的:(Git学习)