Home >> Blog >> Git diff 命令 - 如何比較程式碼版本中的更動

Git diff 命令 - 如何比較程式碼版本中的更動

您是否因為開發SEO相關周邊程式或為了優化分析而必須在 Git 中工作並發現自己想知道是否要進行正確的更改?

或者,也許您想查看與上次提交相比您將提交哪些更改。也許您想查看兩個分支、提交或文件之間的差異。

這些是使用版本控制系統時的常見問題和任務。幸運的是,您可以使用 Git diff 命令驗證所有這些。

別擔心——這裡會用一個有趣的例子教你每個命令。剛開始愉快地閱讀文章。

git diff– 通用 diff 命令

git diff列出當前工作目錄和暫存區之間的更改。

舉個例子:我創建了一個 Git 存儲庫,它是cat_vs_dog. 不,這不是正式的回購,但它非常嚴重😉。然後我創建了cat.txt和dog.txt.

他們用自己的名字介紹自己——像這樣:

Git diff 命令 - 如何比較代碼中的更改

Git diff 命令 - 如何比較代碼中的更改

然後我們使用 將此更改移動到暫存區域git add cat.txt dog.txt。想要確認?然後使用git status,它顯示哪些更改已準備好提交,如下所示:

Git diff 命令 - 如何比較代碼中的更改

然後,假設我想對狗的名字進行一些更改——比如我希望將其稱為“pup”而不是“puppy”。

在此之前,如果我運行該git diff命令,它不會顯示任何內容。你能猜到為什麼嗎?如果你不能,那完全沒問題。繼續和我一起旅行,然後停頓幾秒鐘。

現在,我把“小狗”改成了“小狗”。叫它小狗很酷。

Git diff 命令 - 如何比較代碼中的更改

在暫存它們之前,我希望看到我在當前工作目錄(即當前工作文件夾)中所做的更改與暫存更改的比較。

為此,我運行git diff命令。現在您可以在下面看到它們的區別。

Git diff 命令 - 如何比較代碼中的更改

這有點道理,但也有點奇怪,對吧?不要害怕,我在這裡教你每行 diff 的結果。

早些時候,我們運行了git diff沒有顯示任何內容的命令。因為git diff顯示了工作目錄和暫存區更改之間的差異。但是,在我們暫存更改後,我們沒有更改工作目錄中的任何內容。因此,與舞台區域相比,沒有什麼不同。我希望這是有道理的。

理解git diff的結果——一行一行

Git diff 命令 - 如何比較代碼中的更改

第 1 行– 這是同一文件的兩個版本。Git 將其命名為A表示第一個版本,B表示第二個版本。

  • A – 文件的舊版本
  • B – 文件的新版本

Git diff 命令 - 如何比較代碼中的更改

第 2 行- 關於文件的元數據,對你的生活不是超級有用。前兩個哈希與比較的兩個文件有關。100644是內部文件模式標識符。

Git diff 命令 - 如何比較代碼中的更改

第 3 行– Git 為文件的A版本分配了一個減號 (-),為文件的B版本分配了一個加號 (+) 。

Git diff 命令 - 如何比較代碼中的更改

第 4 行——Git 通常會顯示一大段已修改的行,而不是整個文件。

  • 以 (-) 符號開頭的行來自 A 版本
  • 以 (+) 符號開頭的行來自 B 版本

    除了修改後的行,其中還包括該塊之前和之後的一些代碼行以顯示上下文。

    第 5 行– 每個塊都以Chunk 標頭開頭。塊頭將由@@標識(在開始和結束處)。然後,有兩組數字。你能看到-1和+1嗎?

  • -1表示從A 版本文件中,從第 1 行開始提取一行。
  • +1表示從B 版本文件中,從第 1 行開始提取一行。

    如果集合看起來像-3,4 +3,2 ,那麼:

  • -3,4表示來自A 版本文件,從第 3 行開始提取四行。
  • +3,2表示來自B 版本文件,從第 3 行開始提取兩行。

Git diff 命令 - 如何比較代碼中的更改

文件末尾沒有換行符- 文本說在這些修改的行之後沒有行。這意味著,在上面的示例中,我只添加了一行並修改了同一行。所以,在那之後就沒有更多的行了。

這就是為什麼它在差異結果中顯示“文件末尾沒有換行符” 。希望你明白我的意思。

慶祝時間

花一點時間來慶祝你的認知努力。因為你已經弄髒了 diff 的結果。現在,你已經打下了堅實的基礎,可以開始笑著學習更多的命令了......

如何比較 Git 中的階段性更改

在提交更改之前,您可以將暫存的更改與最後一次提交進行比較。您可以通過添加單個標誌--staged或--cached. 我喜歡--staged,因為它有意義。如果你喜歡--cached,那也很好。

讓我通過一個例子來解釋它。首先,我們在我們的cat_vs_dogrepo 中提交我們的階段性更改。如果你不記得我們上演了什麼,他們介紹自己是小貓和小狗。

在那裡我們想做一個改變——也就是說,我們希望把“小狗”改成沒有上演的“小狗”。

好的,首先我們通過以下方式提交分階段更改git commit -m "intro to cat and dog":

Git diff 命令 - 如何比較代碼中的更改

現在,將“小狗”轉變為“小狗”。然後,運行git diff --staged列出暫存區域和上次提交之間更改的命令。

Git diff 命令 - 如何比較代碼中的更改

  • 一個版本——最後一次提交,包含my name is puppy在dog.txt
  • B 版本– 與上次提交不同的暫存區。就像“小狗”到“小狗”一樣dog.txt。

從 diff 的結果中,我們清除了我們修改和上演的內容——A 版的“我的名字是小狗”和 B 版的“我的名字是小狗”。

我希望您現在能夠比較更改並通過查看差異的結果來識別我們更改的內容。diff是一個超級強大的命令,可讓您以多種方式比較更改。

您需要知道的 4 個差異比較

您可以運行該git diff HEAD命令以將暫存和未暫存的更改與您的上次提交進行比較。

您還可以運行git diff 命令將第一個分支的更改與第二個分支的更改進行比較。當您比較分支時,順序確實很重要。所以diff的結果會根據順序而改變。

重要提示:分支比較僅考慮提交。它不尋找分階段和非分階段的變化。

您可以運行git diff 該命令來比較兩次提交之間的更改。與分支比較一樣,順序在比較提交時也很重要。

您可以運行以下命令來比較特定文件的更改:

  • git diff HEAD
  • git diff
  • git diff --staged 或 git diff --cached ,
  • git diff
  • git diff

結論

希望這篇文章可以幫助您在開發周邊SEO優化分析程式的過程中解決所遇到的版本控管細節,使您的下一次提交或登台更加準確。使用 Git 命令時,你的心態很重要。自信地處理它,你可以從任何錯誤中吸取教訓。

如果您在本教學中發現任何需要更新的內容,請隨時用Line聯繫。