git diff的用法

在git提交環節,存在三大部分:working tree, index file, commit

這三大部分中:

working tree:就是你所工做在的目錄,每當你在代碼中進行了修改,working tree的狀態就改變了。
index file:是索引文件,它是鏈接working tree和commit的橋樑,每當咱們使用git-add命令來登記後,index file的內容就改變了,此時index file就和working tree同步了。
commit:是最後的階段,只有commit了,咱們的代碼才真正進入了git倉庫。咱們使用git-commit就是將index file裏的內容提交到commit中。
總結一下:
git diff:是查看working tree與index file的差異的。
git diff --cached:是查看index file與commit的差異的。
git diff HEAD:是查看working tree和commit的差異的。(你必定沒有忘記,HEAD表明的是最近的一次commit的信息)

爲了更加清晰的闡釋這個關係,來給出一個實例。

[yaya@yaya-desktop]$ cat main.c
#include<stdio.h>
int main(int argc,char *argv[])
{
printf(「hello.\n」);
printf(「he was a student.\n」);
return 0;
}


而後git init, git add . , git commit;
以後你將源代碼修改成:

[yaya@yaya-desktop]$ cat main.c
#include<stdio.h>
int main(int argc,char *argv[])
{
printf(「hello.\n」);
printf(「he was a student.\n」);
printf(「he was born in finland.\n」);
return 0;
}


此時你git add .,但不用執行git commit命令。而後你再將源代碼改成:git

  1. [yaya@yaya-desktop]$ cat main.c
  2. #include<stdio.h>
  3. int main(int argc,char *argv[])
  4. {
  5. printf(「hello.\n」);
  6. printf(「he was a student.\n」);
  7. printf(「he was born in finland.\n」);
  8. printf(「he is very clever!\n」);
  9. return 0;
  10. }
複製代碼


這個時候,你執行以下三個命令,仔細查看,我相信你會發現它們三個的區別的!
$ git diff
$ git diff –cached
$ git diff HEAD
講到這裏,基本上對git diff命令有了比較深刻的瞭解了,如今你再使用git status看看輸出結果,樣子大概是這樣:

[yaya@yaya-desktop]$ git status
# On branch master
# Changes to be committed:
spa

 (use 「git reset HEAD <file>…」 to unstage)
#
#    modified:   main.c
#
# Changed but not updated:
#   (use 「git add <file>…」 to update what will be committed)
#
#    modified:   main.c
#很明顯能夠知道:
Changes to be committed表示已經存在於index file裏,但還沒有提交。
Changed but not updated表示在working tree已經作修改,但尚未使用git add登記到index file裏。 好了,對於git diff的用法就簡單溫習到這裏吧。
相關文章
相關標籤/搜索