一、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 "注释"