Git之"git diff"命令

weixin_33850890發表於2015-10-15

本文主要是瞭解git diffgit diff --cachedgit diff HEAD命令的區別。

1.準備工作:

  • 1.新建一個資料夾,名字為Test, 並且使用git init命令進行初始化。
  • 2.在Test目錄中,新建main.m檔案,並新增以下內容。
#include <stdio.h>
int main {
    return 0;
}

執行新增提交操作。

$ git add .
$ git commit -m "新增了main.m檔案"
  • 3.編輯main.m檔案, 新增一些內容printf(...)
#include <stdio.h>
int main {
    printf("Hello, Boys");
    return 0;
}

此時,執行git add .命令,不執行git commit命令!

  • 4.再次編輯main.m檔案, 新增一些內容printf(...)
#include <stdio.h>
int main {
    printf("Hello, Boys");
    printf("Let's go!");
    return 0;
}

不進行新增,提交操作。

2.執行git status命令,檢視結果

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   main.m

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   main.m

結果中,第一行modified: main.m表示已新增到暫存區中,還沒有提交到倉庫。第二行modified: main.m表示修改檔案還沒有被新增到暫存區中。

3.執行git diff命令,比較不同

  • 1.執行git diff命令,結果如下:
$ git diff
diff --git a/main.m b/main.m
index d87b99d..33077a5 100644
--- a/main.m
+++ b/main.m
@@ -1,5 +1,6 @@
#include <stdio.h>
 int main {
     printf("Hello, Boys");
+    printf("Let's go!");
     return 0;
 }

由此可見,git diff比較的是工作目錄暫存區的區別。

  • 2.執行git diff --cached命令,結果如下。
$ git diff --cached
diff --git a/main.m b/main.m
index 2662a1a..d87b99d 100644
--- a/main.m
+++ b/main.m
@@ -1,5 +1,5 @@
 #include <stdio.h>
 int main {
+    printf("Hello, Boys");
     return 0;
 }

由此可見,git diff --cached比較的是暫存區本地倉庫的區別。

  • 3.執行git diff HEAD命令,結果如下。
$ git diff HEAD
diff --git a/main.m b/main.m
index 2662a1a..33077a5 100644
--- a/main.m
+++ b/main.m
@@ -1,5 +1,6 @@
 #include <stdio.h>
 int main {
+    printf("Hello, Boys");
+    printf("Let's go!");
     return 0;
 }

比較的是工作目錄本地倉庫的區別。

4.檔案的三種狀態

對於任何一個檔案,在 Git 內都只有三種狀態:已提交(committed)已修改(modified)已暫存(staged)

  • 已提交表示該檔案已經被安全地儲存在本地資料庫中了;
  • 已修改表示修改了某個檔案,但還沒有提交儲存
  • 已暫存表示把已修改的檔案放在下次提交時要儲存的清單中

Git 管理專案時,檔案流轉的三個工作區域:工作目錄暫存區域,以及本地倉庫

  • Git 目錄(倉庫):它是 Git 用來儲存後設資料和物件資料庫的地方。該目錄非常重要,每次克隆映象倉庫的時候,實際拷貝的就是這個目錄裡面的資料。

  • 工作目錄:從專案中取出某個版本的所有檔案和目錄,用以開始後續工作的叫做工作目錄。這些檔案實際上都是從 Git 目錄(倉庫)中的壓縮物件資料庫中提取出來的,接下來就可以在工作目錄中對這些檔案進行編輯。

  • 暫存區域:所謂的暫存區域(索引檔案)只不過是個簡單的檔案,一般都放在 Git 目錄中。

  • 基本的Git 工作流程如下

    • 1.在工作目錄中修改某些檔案。
    • 2.對修改後的檔案進行快照,然後儲存到暫存區域。
    • 3.提交更新,將儲存在暫存區域的檔案快照永久轉儲到 Git 目錄中。

注意:可以從檔案所處的位置來判斷狀態:

  • 如果是 Git 目錄中儲存著的特定版本檔案,就屬於已提交狀態;
  • 如果作了修改並已放入暫存區域,就屬於已暫存狀態;
  • 如果自上次取出後,作了修改但還沒有放到暫存區域,就是已修改狀態。

相關文章