比较版本差异

我们将在本节来介绍如何查看工作区(现在正处理的文件)和仓库版本之间的更改或差异。然后我们会在第二部分中来介绍如何在暂存区和仓库之间进行比较。

检查工作区和仓库之间的差异

在更改和保存文件后,工作区上的文件与我们的仓库中的文件就会有所不同。但我们究竟如何查看这些变化呢?因为有时候我们对文件进行了一些更改,并且我们想要查看仓库中的文件, 并且比较它们之间的差异。当我们编写代码时这种情况经常发生,因为你想要确切地知道哪一些进行了更改以及它们是如何影响整个项目的。

所以我们可以做的第一件事是检查git status,它将会列出被修改的文件,这意味着它与主项目或主仓库中的文件不同。

如果你输入git diff并执行它,它将显示它们之间的差异。

$ git diff
diff --git a/test1.txt b/test1.txt
index e1dd8e3..448ad04 100644
--- a/test1.txt
+++ b/test1.txt
@@ -1,2 +1,2 @@
-This is my first Git repository.
-New added text.
\ No newline at end of file
+This was my first Git repository.
+This line is updated.
\ No newline at end of file

git bash中的红色文本显示仓库中的内容,绿色文本显示文本是当前工作文本有哪些修改。

如果在上次提交后有多个文件更新,git则会逐个列出每个文件的差异。

Git diff 外部工具

如果你还没有习惯使用git默认diff工具,可以将difftool(差异比较工具)配置为你习惯的工具。

下面的例子是如何配置kdiff3工具为gitdiffmerge的外部工具。

更改.gitconfig文件目录

在Windows操作系统中,打开C:\Users\username目录中的.gitconfig文件并将下面的文字添加到文件中,

[diff]
    tool = kdiff3
[difftool "kdiff3"]
    path = "C:/Program Files/KDiff3/kdiff3.exe"
    trustExitCode = false
[difftool]
    prompt = false
[merge]
    tool = kdiff3
[mergetool "kdiff3"]
    path = "C:/Program Files/KDiff3/kdiff3.exe"
    trustExitCode = false
[mergetool]
    keepBackup = false

这里,path应是实际的kdiff3安装的路径,你电脑上的实际路径可能与例子中的不同。

通过git bash 配置difftool

你也可以使用git bash中的命令来配置difftoolmergetool(合并工具)。

git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add mergetool.kdiff3.trustExitCode false

git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add difftool.kdiff3.trustExitCode false

它的作用跟直接.gitconfig文件内容是一样的。

查看暂存区和仓库之间的差异

你可以使用git difftool命令来查看工作区与仓库中文件之间的文件差异。

Git Difftool-kdiff3

git diff显示工作区和仓库之间的区别,并且在文件已添加到暂存区后,git diff将不会显示此文件的任何差异,因为它不会将暂存区与仓库进行比较,因此这就是为什么你用git status来查看后,看起来所有内容都是最新的,即使文件仍然与你的仓库中的文件有所不同。

用于比较暂存区和仓库的正确命令是在git diff后面加上--staged选项。

$ git diff --staged
diff --git a/test1.txt b/test1.txt
index e1dd8e3..448ad04 100644
--- a/test1.txt
+++ b/test1.txt
@@ -1,2 +1,2 @@
-This is my first Git repository.
-New added text.
\ No newline at end of file
+This was my first Git repository.
+This line is updated.
\ No newline at end of file