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 "註釋"