当前位置: 代码迷 >> 综合 >> [扩展阅读]Git实用教程记录——版本比较(diff)
  详细解决方案

[扩展阅读]Git实用教程记录——版本比较(diff)

热度:40   发布时间:2023-12-26 03:55:53.0

初始化操作:

1.新建文件夹作为本次的一个演示项目(初始化Git)

2.创建一个 game.py 的文本

3.创建一个 README.md 文件,写清楚这是一个课后作业的项目。

4.执行 git add README.md game.py 命令将文件添加到暂存区域,接着执行 git commit -m "guess game" 提交项目的第一个快照

5.更改两个文件( README.md game.py)

比较暂存区域与工作目录(例子我使用的以前学习过的一个代码)

首先,diff 命令是 linux 上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff 程序的输出被称为补丁 (patch),因为 Linux 系统中还有一个 patch 程序,可以根据 diff 的输出将 a.c 的文件内容更新为 b.c。

每行的解释

第一行:diff --git a/README.md b/README.md——表示对比的是存放在暂存区域的 README.md 和工作目录的 README.md

第二行:index 0add77b..58dc7e6 100644——表示对应文件的 ID 分别是 7966837 和 472a180,左边暂存区域,后边当前目录。最后的 100644 是指定文件的类型和权限。

第三行:--- a/README.md——表示该文件是旧文件(存放在暂存区域)

第四行:+++ b/README.md——表示该文件是新文件(存放在工作区域)

第五行:@@ -1 +1,2 @@——以 @@ 开头和结束,中间的“-”表示旧文件,“+”表示新文件,后边的数字表示“开始行号,显示行数”

第六—七行:

这是我没有改边文件的编码格式

这是将两个文件合并显示的结果,前边有个 + 的绿色的那一行说明是新文件独有的浅灰色的则是两个文件所共有的内容。所以,+1,2 表示新文件在合并显示中从第 1 行开始,显示 2 行 -1 后边没有显示的行数是因为在合并显示的结果中,旧文件已经完全包含在新文件中了(也就是旧文件没有自己“独有的”内容)。

第八行:\ No newline at end of file——这是 Git 的提醒:文件不是以换行符结束。

再下边就是另外两个文件(game.py)的比较了,理解的方式跟上边一样。

两个 @@ 之间表示下方合并显示的范围,@@ -1,20 +1,28 @@ 表示旧文件从第 1 行开始,显示 20 行;新文件从第 1 行开始,显示 28 行。

(:)意思是内容太多,窗口太小,没法全部显示,正在等待你的命令……

移动命令

按下 j 按键表示向下移动一行;按下 k 按键则是向上移动一行f 表示向下一页(一个窗口的内容);b 表示向上一页的移动d 表示向下移动半页u 表示向上移动半页

跳转命令

g 去到第一行,按 G 去到最后一行。可以,先输入数字 3,再按下 g,表示去到第 3 行。

搜索命令

比如想看下关于 print 函数的内容有没有变动,可以使用搜索命令。

输入斜杠(/)或问号(?),后边输入搜索的关键字:

按下回车,所有匹配的关键字均高亮显示:

然后斜杠(/)和问号(?)的区别主要是搜索方向的不同:斜杠(/)表示从当前位置向下搜索,问号(?)表示从当前位置向上搜索。

接着输入 n 表示顺着当前的搜索方向快速跳转到下个匹配的位置,大写的 N 则是与当前搜索方向相反。

退出和帮助

在点点(:)后边输入 q,表示退出 diff;

比较两个历史快照

我们执行 git commit -am "添加功能:玩家只有三次机会" 命令,添加并提交工作目录中的所有文件:

执行 git log 命令,可以看到现在 Git 仓库中已经有两个快照了:

执行 git diff dc50d9a b06472e 命令,即可比较 Git 仓库中两个快照的差异:

比较当前工作目录和 Git 仓库中的快照

 首先我们稍微改动一下 README.md 文件的内容:

目前我们Git仓库是这样的(dc50d9a是图中的6e2675....)

三棵树是这样:

如果希望比较第一份快照(b06472e )和当前目录的内容,输入 git diff b06472e 命令即可

如果希望比较最新提交的快照和当前目录的内容,输入 git diff HEAD 命令即可:

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

执行 git add README.md 命令,将第三版的 README.md 文件添加到暂存区域三棵树就修改成这样了

如果希望比较最新提交的快照和暂存区域的文件,只需要执行 git diff --cached 命令:

当然也可以指定其他快照,就是需要多写上一个 ID 值:

小结

1.git diff 比较 Working Directory and Stage(Index)

2.git diff HEAD 比较 Working Directory and Repository(HEAD)(最新的快照)

3.git diff xxxxxxx xxxxxxx(两个快照的地址信息) 比较 Repository中两个快照

4.git diff xxxxxxx 比较 Working Directory and Respository中的快照

5.git diff --chched  比较 Stage(Index)and Repository(HEAD)(最新的快照)

6.git diff --chched 比较 Stage(Index) and Respository(中的任意一个快照) 

  相关解决方案