1. 程式人生 > >git diff 四種比較方式

git diff 四種比較方式

工作場景

在用git進行版本控制的時候,通常會有這樣的需求:
1.我想知道我的工作目錄中都發生了那些變化,以輔助我的commit操作。
2.當要真正進行提交時,我需要清楚將要提交的內容和版本庫的內容有哪些不同,這樣的提交是正確的嗎。
3.在線上程式碼出現問題的時,明確的知道原來有個版本的程式碼是好用的,除了進行線上緊急回滾外,我需要知道到底進行了什麼操作引起了失敗。
除此之外可能還會有其他的需求吧。

先上理論

那git給我們提供了哪些方式,是我們對自己的修改或者變更瞭如指掌呢。
1. git diff
顯示工作目錄和索引之間的差異。
2. git diff commit


顯示工作目錄和指定提交之間的差異。比較常見的用法是比較工作目錄於HEAD指向的提交之間的差異,這時需要用HEAD替代commit
3. git diff –cached commit
比較索引(stage)和給定提交之間的差異,其中commit可以省略,如果省略,預設比較的是索引與HEAD指向的提交間的差異。
4. git diff commit1 commit2
比較兩個提交之間的差異。該命令會忽略工作目錄和索引之中的內容,直接比較兩個提交之間的變化。

有說有練

第一步:先初始化一個git倉庫,並作兩次提交,且在工作目錄中進行一些變更:

mkdir git-diff
cd
git-diff git init echo "Hello git diff" >> readme.txt git add . git commit -m 'first commit' echo "hello next commit" >> readme.txt git add . git commit -m 'second commit' echo "I'm in the stage" >> readme.txt git add . echo "I'm in the workplace" >> readme.txt

第二步,開始操作

bingo 初始化工作做好了,來看具體的操作吧:
1.git diff 例項中顯示,工作目錄比stage中添加了一行I’m in the workplace

git diff

diff --git a/readme.txt b/readme.txt
index cecb589..6f877a8 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1,4 @@
 Hello git diff
 hello next commit
 I'm in the stage
+I'm in the workplace

2.git diff commit 例項中對當前工作區和HEAD指向的提交進行比較,顯示工作區比HEAD指向的提交新添加了兩行。

git diff HEAD

diff --git a/readme.txt b/readme.txt
index 56e1883..6f877a8 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,4 @@
 Hello git diff
 hello next commit
+I'm in the stage
+I'm in the workplace

3.git diff –cached commit 例項中,用stage中的檔案與HEAD指向中的版本進行了比較,很明顯,我在提交提交之後想readme.txt中添加了一行I’m in stage並將其新增到了stage中。

git diff --cached HEAD

diff --git a/readme.txt b/readme.txt
index 56e1883..cecb589 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
 Hello git diff
 hello next commit
+I'm in the stage

4.git diff commit1 commit2 比較了HEAD與其上一次提交之間的差異,通過觀察我們初始化的操作,可以發現,這是完全正確的顯示。

git diff HEAD HEAD^

diff --git a/readme.txt b/readme.txt
index 56e1883..8adabc7 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1 @@
 Hello git diff
-hello next commit

小例項,大道理,通過簡單的例項,瞭解命令背後的真實原理,以促進我們工作中對其的使用,以及解決問題時不那麼迷茫。