比较 Git 文件差异

内容纲要

查看【Git】专题可浏览更多内容

比较修改

在 Git 中可以使用 git diff 命令比较修改,分析文件差异。

查看工作区与暂存区的修改对比

git diff 命令不带选项参数下是对比「工作树(working tree)」与「索引(index)」的差异。

但你可能需要了解 Git 的内部原理才能比较好的理解树的概念,所以我并不打算在这里详细的阐述这些东西,毕竟还没会用而上来就谈枯燥乏味的东西任谁也学不下去。

你只需要知道这里所说的「工作树(working tree)」就是你的「工作目录(Working Directory)」,而「索引(index)」就是「暂存区(Staging Area)」,也就是比较的是工作目录中当前文件和暂存区域快照之间的差异, 即修改之后还没有暂存起来的变化内容

$ git diff

如果要查看某个指定文件的修改可以这样:

$ git diff -- <文件名>
# 例如查看 README.md 文件的修改:
$ git diff -- README.md

如果自上一次提交后工作目录中没有修改,暂存区也没有添加修改,那么此时在工作目录中的修改将会和历史版本进行对比。进一步,如果将修改添加到暂存区,此时使用 git diff 是没有内容的,因为不含选项默认是查看未暂存的修改。

查看暂存区与版本库的修改对比

如果要比对已暂存文件与最后一次提交的文件差异,可以使用 --cached 选项(与 --staged 选项一样的):

$ git diff --staged
# 或
$ git diff --cached

❓ 如果添加修改至暂存后,再次对工作目录中进行了修改。
那么使用 git diff (注意,不带选项)时,是与什么进行对比呢?
答案是暂存区。

查看工作区与版本库的修改对比

如果要查看当前工作目录与最后一次提交的修改对比,可以使用:

$ git diff HEAD

确切的说是 HEAD 的最后一次提交,HEAD 表示你当前所在的分支。

查看与指定历史版本的修改对比

如果要将工作区或暂存区与指定历史版本做对比,那么可以使用 git log 查看要指定的历史版本的「Commit ID」,然后:

# 比较工作区与指定 Commit ID 的差异,可以使用 git diff <commit id>
$ git diff de4d93a

# 比较暂存区与指定 Commit ID 的差异,可以使用 git diff --cached <commit id>
$ git diff --cached de4d93a

小结

  • 使用 git diff 命令对比修改差异;
  • 使用 -- <文件名> 来指定查看某个文件的修改;
  • 使用 git diff 不带选项参数是查看工作区与暂存区的差异;
  • 使用 git diff --cached 查看暂存区与版本库的差异;
  • 使用 git diff HEAD 查看工作区与当前版本库所在分支的最近一次提交的差异;
  • 使用 git diff <commit id> 查看工作区与指定历史版本的差异,如果加上 --cached 选项就是暂存区与指定历史版本的差异;