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还原文件到特定版本

第一步: 在命令行中输入 git log first.txt 得到该文件的commit 历史。 会得到类似下面的界面

 

第二步: 复制需要回退版本的hash,在此假设我们回退到 616d3b3a280b32243e9d42fb9a635a7eba16fb60 ,则复制该序列即可

第三步:checkout 对应版本。格式为 git checkout <hash> <filename>, 在此即为命令行中输入 git checkout 616d3b3a280b32243e9d42fb9a635a7eba16fb60 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) <qumh@glodon.com>
Date:   Fri Jul 16 10:22:43 2021 +0800

    first3

commit adf45ba60735c252528c4c41c28ca93a1a14ef7f
Author: 屈梦豪(10037598) <qumh@glodon.com>
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) <qumh@glodon.com>
Date:   Fri Jul 16 10:10:54 2021 +0800

    first2

commit adf45ba60735c252528c4c41c28ca93a1a14ef7f
Author: 屈梦豪(10037598) <qumh@glodon.com>
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 "注释"

 

posted @ 2021-07-16 11:09  kongbursi  阅读(953)  评论(0编辑  收藏  举报