Git 教程 - 比较版本差异
我们将在本节来介绍如何查看工作区(现在正处理的文件)和仓库版本之间的更改或差异。然后我们会在第二部分中来介绍如何在暂存区和仓库之间进行比较。
检查工作区和仓库之间的差异
在更改和保存文件后,工作区上的文件与我们的仓库中的文件就会有所不同。但我们究竟如何查看这些变化呢?因为有时候我们对文件进行了一些更改,并且我们想要查看仓库中的文件,并且比较它们之间的差异。当我们编写代码时这种情况经常发生,因为你想要确切地知道哪一些进行了更改以及它们是如何影响整个项目的。
所以我们可以做的第一件事是检查 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
工具为 Git 的 diff
,merge
的外部工具。
更改 .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 中的命令来配置 difftool
或 mergetool
(合并工具)。
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
git config --global --add difftool.prompt false
它的作用跟直接 .gitconfig
文件内容是一样的。
查看暂存区和仓库之间的差异
你可以使用 git difftool
命令来查看工作区与仓库中文件之间的文件差异。
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
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn