1. 程式人生 > 其它 >git diff命令輸出解釋 & git checkout還原檔案到特定版本

git diff命令輸出解釋 & git checkout還原檔案到特定版本

一、git diff命令輸出解釋

1、比較staging area(暫存區)和working area(工作區)的檔案

git diff

2、master分支和working area的檔案

git diff master

3、HEAD指向的內容和working area的檔案

git diff HEAD 

4、遠端master分支比較當前工作區

git diff refs/remotes/origin/master 

5、master分支的某個檔案的歷史版本和working area的該檔案的比較

git diff 0c5ee16a6a4c849d0ae0448caa8ff174399c7c3c test.cpp 

原始first.txt檔案內容:

first

修改之後的

firsat
second

index 9c59e24..860035c 100644後面兩個數字表示兩個檔案的hash值(以..分隔),最後一個表示檔案的屬性,許可權(滿許可權是777)。

--- a/first.txt其中的---表示修改前的檔案

+++ b/first.txt其中的+++表示修改後的檔案

@@ -1 +1,2 @@分為兩部分,第一個是-1,其中-表示修改前,1表示第1行開始(一共就一行);第二個是+1,2,其中的+表示修改後,1,2表示第1行開始的2行(總共2行)。

-first # -表示這一行刪去了


+firsat # +表示這一行加上了
+second

差異按照差異小結進行組織,每個差異小結的第一行都是定位語句,由@@開頭,@@結尾。

二、git還原檔案到特定版本

第一步: 在命令列中輸入 gitlogfirst.txt 得到該檔案的commit 歷史。 會得到類似下面的介面

第二步: 複製需要回退版本的hash,在此假設我們回退到616d3b3a280b32243e9d42fb9a635a7eba16fb60 ,則複製該序列即可

第三步:checkout 對應版本。格式為 git checkout <hash> <filename>, 在此即為命令列中輸入 git checkout616d3b3a280b32243e9d42fb9a635a7eba16fb60 first.txt

第四步: commit checkout下來的版本。 如: git commit -m "註釋"

但是需要注意:git log只能獲取到當前分支上面的commit id

中間的操作就是換了一個分支branch1,然後提交了兩次

發現commit id就是隻會顯示本分支上面提交過的,但是你可以把檔案回退到其他分支的版本上

qumh@qumh MINGW64 /f/git_test (master)
$ git checkout branch1
Switched to branch 'branch1'

qumh@qumh MINGW64 /f/git_test (branch1)
$ cat first.txt
firsat
second
third
qumh@qumh MINGW64 /f/git_test (branch1)
$ git log first.txt
commit 6d7d839528f5e43842646e0d2e435b05cca13391 (HEAD -> branch1)
Author: 屈夢豪(10037598) <[email protected]>
Date:   Fri Jul 16 10:22:43 2021 +0800

    first3

commit adf45ba60735c252528c4c41c28ca93a1a14ef7f
Author: 屈夢豪(10037598) <[email protected]>
Date:   Fri Jul 16 10:08:32 2021 +0800

    first

qumh@qumh MINGW64 /f/git_test (branch1)
$ git checkout master
Switched to branch 'master'

qumh@qumh MINGW64 /f/git_test (master)
$ git log first.txt
commit 616d3b3a280b32243e9d42fb9a635a7eba16fb60 (HEAD -> master)
Author: 屈夢豪(10037598) <[email protected]>
Date:   Fri Jul 16 10:10:54 2021 +0800

    first2

commit adf45ba60735c252528c4c41c28ca93a1a14ef7f
Author: 屈夢豪(10037598) <[email protected]>
Date:   Fri Jul 16 10:08:32 2021 +0800

    first

qumh@qumh MINGW64 /f/git_test (master)
$ git reset 6d7d839528f5e43842646e0d2e435b05cca13391
Unstaged changes after reset:
M       first.txt

qumh@qumh MINGW64 /f/git_test (master)
$ cat first.txt
firsat
second
qumh@qumh MINGW64 /f/git_test (master)
$ git checkout 6d7d839528f5e43842646e0d2e435b05cca13391 first.txt
Updated 1 path from 5be811a

qumh@qumh MINGW64 /f/git_test (master)
$ cat first.txt
firsat
second
third

如果只想提交暫存區中的一個檔案,可以使用下面命令

git commit 檔名 -m "註釋"