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文件,此时可以找到这些文件进行手动打补丁。

posted @ 2024-10-17 19:30  李小菜丶  阅读(1434)  评论(0)    收藏  举报