git diff 的5种文件比较
`git diff` 是 Git 中用于比较不同版本文件差异的命令。
比较暂存区与工作区之间的差异
当我们直接修改了工作区中的文件之后,在添加到暂存区之前,想要看看修改了那些内容,保证修改正确性。这时候运行 git diff 即可,将会显示暂存区与工作区文件的差异。
git diff
例如下图就是一个示例:

比较给定提交 ID与工作区的差异
有时候你需要将工作区的改动和历史中某个提交点的内容进行对比,这个命令就有用了。例如,我要将目前工作区的内容和当前分支的最新一次的提交进行比较,运行 git diff commit_id 或者 git diff HEAD 即可。
比较暂存区与给定提交 ID的差异
因为已经将修改内容添加到暂存区了,这时候直接运行 git diff 就看不到差异了。因为我们手速快,已经将工作区修改的文件通过 git add 命令添加到暂存区了,这时候,又想要知道暂存区的变更和给定提交点的差异。只需要加上 --cached 选项即可。
如果省略 commit,那么,就是默认指 HEAD。
比较指定的两次提交的差异
git diff commit1 commit2
比较两个分支之间的差异
假设现在有分支test-1和master分支,需要比较这两个之间的差异,可以使用一下命令
git diff test-1 master
限制路径
如果只要显示 src 文件夹下的差异,指定文件夹名即可
git diff --stat HEAD~ HEAD src
如果只要显示 test.txt 文件的差异,指定文件即可
git diff HEAD~ HEAD src/test.txt
--stat 显示有多少行发生变化,简洁的展示差异。
制作补丁patch
git diff 可以制作补丁文件,在其他机器上对应目录下使用 git apply patch 将补丁打上即可。
git diff > patch
补丁名是自定义的,通常带有 patch 命名,这样命名比较通俗易懂。
前面介绍的五种比较差异的场景,我们可以通过比较差异的命令加上 > patch 这样的方式导出补丁文件,这里的 patch 就是自定义的补丁名。
我们来进行一个示例:使用 git diff HEAD~ HEAD > patch 导出上一次提交和这一次提交差异的补丁。

运行上述命令之后,会生成一个叫 patch 补丁文件。现在来看看差异文件到底表示的什么含义:
-表示第 1 个文件+表示第 2 个文件@@ -1 +1,2@@表示比较的区块,第 1 个文件的第 1 行,第 2 个文件的第 1 行起的连续 2 行+new line in work dir新增的内容
总结起来就是表示当前分支的倒数第 2 个提交与最后 1 个提交之间的差异是,最后一个提交在 test.txt 的第 2 行新增了一行。
使用补丁
# 切换至倒数第 2 个提交
git reset --hard HEAD~
# 应用一下补丁
git apply patch
这时候刚刚差异的内容就会在相应的文件夹进行修改了,但是并不会生成提交。补丁文件可以发给其他人,只需执行 git apply patch 就可以实现打补丁的效果。
在使用补丁之前,我们可以先检验一下补丁能否应用,git apply --check patch 如果没有任何输出,那么表示可以顺利接受这个补丁。
使用git apply --reject patch将能打的补丁先打上,有冲突的会生成.rej文件,此时可以找到这些文件进行手动打补丁。

浙公网安备 33010602011771号