加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

第一本Git命令教程(3) - 變動

2020/02/10
129
閱讀需 12 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

今天是 Git 系列課程第三課,前兩課我們都是在做 Git 倉庫準備工作,今天痞子衡要講的是如何查看 Git 空間內(nèi)發(fā)生的改動。

  

本地有了倉庫,我們便可以在倉庫所在目錄下做文件增刪改操作,為了確定改動操作的正確性,我們需要實時查看這些改動狀態(tài),有兩種查看方式 git status 和 git diff,痞子衡為大家逐一介紹:

1. 查看 Git 空間文件改動狀態(tài) git status

前面講過 Git 空間內(nèi)文件改動有 4 種狀態(tài),除了 Unmodified 狀態(tài)的文件因為并未改動默認沒有狀態(tài)不做顯示之外,其他文件改動狀態(tài)都可以通過 git status 來查看。讓我們開始在工作區(qū)創(chuàng)建 3 個文件:main.c、test.c、dummy.c
  

dummy.c(路徑:/gittest/app/dummy.c)為空白文件。
  

test.c(路徑:/gittest/app/test.c)文件內(nèi)容如下:

#include <stdio.h>

#include <stdlib.h>

void test(void)

{
   

printf("this is testn");

}
  

main.c(路徑:/gittest/main.c)文件內(nèi)容如下:

#include <stdio.h>

#include <stdlib.h>

int main(void)

{
   

printf("hello worldn");
   

return 0;

}
  

為了使改動類型更加豐富一點,我們在已存在 Git 本地&遠程倉庫的 README.md 文件中增加一行內(nèi)容"# first update"。我們來看看 Git 記錄的狀態(tài),從下面結(jié)果可知,新增的 3 個文件在 Git 空間里都屬于 Untracked 文件,存放在工作區(qū)內(nèi)。READMED.md 文件的改動處于 Modified 狀態(tài),也存放在工作區(qū)。

jay@pc MINGW64 /d/my_project/gittest (master)

$ git status

On branch master

Your branch is up to date with 'origin/master'.

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:   README.md

Untracked files:

  (use "git add <file>..." to include in what will be committed)

       

app/
       

main.c

no changes added to commit (use "git add" and/or "git commit -a")

2. 查看 Git 空間文件具體改動 git diff

git status 只能讓我們知道文件在 Git 空間內(nèi)的改動狀態(tài),但如果我們想查看某個文件內(nèi)具體改了什么(也可以理解為在不同 Git 空間中的差異),此時需要用 git diff 命令。
  

對于 main.c 文件,由于是新增的文件,其只存在于工作區(qū),且處于 Untracked 狀態(tài),Git 認為無論是哪兩個 Git 空間之間的比對都沒有意義,得到的結(jié)果是沒有區(qū)別。
  

而對于 README.md 文件,由于已經(jīng)被提交到倉庫了,處于 Git 管理中,所以這個文件同時存在于三個 Git 空間(工作區(qū),暫存區(qū),倉庫),我們在工作區(qū)內(nèi)對其進行了文件改動,無論是比對工作區(qū) vs 暫存區(qū)或者工作區(qū) vs 倉庫,得到的結(jié)果應該都是 README.md 文件里的具體變化內(nèi)容。而如果比對暫存區(qū) vs 倉庫,得到的結(jié)果也應該是沒有區(qū)別。

2.1 查看文件當前變動(工作區(qū) vs 暫存區(qū))git diff [file path]

// 查看 main.c 得不到任何結(jié)果

jay@pc MINGW64 /d/my_project/gittest (master)

$ git diff main.c

// 查看 README.md 可看到文件具體變化

jay@pc MINGW64 /d/my_project/gittest (master)

$ git diff README.md

diff --git a/README.md b/README.md

index 92eca93..229dc5f 100644

--- a/README.md

+++ b/README.md

@@ -1 +1,2 @@

 # gittest

+# first update

2.2 查看文件跨越變動(工作區(qū) vs 倉庫)git diff [commit] [file path]

由于 gittest 倉庫目前只有一次提交,所以此處 commit 只能是 HEAD,只能與上一次提交對比,得到的結(jié)果與 2.1 是一致的。為了充分展示這個功能,我們將此次的 README.md 的改動先提交到倉庫。

jay@pc MINGW64 /d/my_project/gittest (master)

$ git add README.md

jay@pc MINGW64 /d/my_project/gittest (master)

$ git commit -m "second commit"

[master aa9db9d] second commit

 1 file changed, 1 insertion(+)

jay@pc MINGW64 /d/my_project/gittest (master)

$ git fetch

jay@pc MINGW64 /d/my_project/gittest (master)

$ git rebase

First, rewinding head to replay your work on top of it...

Applying: second commit

jay@pc MINGW64 /d/my_project/gittest (master)

$ git push

Counting objects: 3, done.

Writing objects: 100% (3/3), 276 bytes | 276.00 KiB/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To github.com:JayHeng/gittest.git
   

5fe04f8..867df08  master -> master
  

然后對 README.md 再修改一次增加新一行內(nèi)容"# second update"?,F(xiàn)在我們再來查看 README.md 跨級變動(HEAD 表示是最近一次 commit,HEAD^表示上一次 commit,HEAD~100 表示上 100 次 commit):

// 查看 README.md 與最近一次 commit 的變化(等同于當前變化)

jay@pc MINGW64 /d/my_project/gittest (master)

$ git diff HEAD README.md

diff --git a/README.md b/README.md

index 229dc5f..db5442d 100644

--- a/README.md

+++ b/README.md

@@ -1,2 +1,3 @@

 # gittest

 # first update

+# second update

// 查看 README.md 與上一次 commit 的變化(等同于 2 次變化的匯總)

jay@pc MINGW64 /d/my_project/gittest (master)

$ git diff HEAD^ README.md

diff --git a/README.md b/README.md

index 92eca93..db5442d 100644

--- a/README.md

+++ b/README.md

@@ -1 +1,3 @@

 # gittest

+# first update

+# second update
  

對于 README.md 文件的第二次改動僅是用于演示跨越變動對比的功能,為不影響后續(xù)講解,我們現(xiàn)在將這個變動恢復(文件編輯器打開文件,直接刪除"# second update")。

2.3 查看文件歷史變更(倉庫 vs 倉庫)git diff [commit] [commit]

gittest 倉庫目前已有 2 次提交,讓我們直接比對這兩次提交。Note:Git 每次 commit 都會產(chǎn)生一個唯一 ID(SHA-1 號)用于記錄這個 commit,可在 git commit/git push 命令的返回結(jié)果里看到。

jay@pc MINGW64 /d/my_project/gittest (master)

$ git diff 5fe04f8 867df08

diff --git a/README.md b/README.md

index 92eca93..229dc5f 100644

--- a/README.md

+++ b/README.md

@@ -1 +1,2 @@

 # gittest

+# first update

相關推薦

電子產(chǎn)業(yè)圖譜

碩士畢業(yè)于蘇州大學電子信息學院,目前就職于恩智浦(NXP)半導體MCU系統(tǒng)部門,擔任嵌入式系統(tǒng)應用工程師。痞子衡會定期分享嵌入式相關文章