比較版本差異

我們將在本節來介紹如何檢視工作區(現在正處理的檔案)和倉庫版本之間的更改或差異。然後我們會在第二部分中來介紹如何在暫存區和倉庫之間進行比較。

檢查工作區和倉庫之間的差異

在更改和儲存檔案後,工作區上的檔案與我們的倉庫中的檔案就會有所不同。但我們究竟如何檢視這些變化呢?因為有時候我們對檔案進行了一些更改,並且我們想要檢視倉庫中的檔案, 並且比較它們之間的差異。當我們編寫程式碼時這種情況經常發生,因為你想要確切地知道哪一些進行了更改以及它們是如何影響整個專案的。

所以我們可以做的第一件事是檢查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