对上一篇关于工作区,暂存区以及master分支的解析
diff部分
1、将两行乱码删除,只输入3,add并commit
输入 git diff -- readme.txt 因为即add又commit ,所以三个区完全相同,所以不输出任何消息
输入 git diff HEAD -- readme.txt 不输出任何消息,理由同上
输入 git diff --cached -- readme.txt 同上
2、将3修改为2,保存,只add不commit
因为只add不commit ,暂存区和工作区相同,master分支不同
输入 git diff -- readme.txt 这条比较的是工作区和暂存区,所以不输出消息
输入 git diff HEAD -- readme.txt 这条比较的是工作区和master分支的差别,所以有输出,如下
diff --git a/readme.txt b/readme.txt
index e440e5c..d8263ee 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1 @@
-3
\ No newline at end of file
+2
\ No newline at end of filehed -- readme.txt
@@之间夹的是有区别的行号
-后面是3
+后面是2
提示我们这两个文件不同的地方,一个3,一个是2,和我们刚才做出的修改一样
输入 $ git diff --cached -- readme.txt 这条比较暂存区和master分支的差别,所以有输出,如下
diff --git a/readme.txt b/readme.txt
index e440e5c..d8263ee 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1 @@
-3
\ No newline at end of file
+2
\ No newline at end of file
解释同上,而这个地方已经可以证明add确实是将文件从工作区添加到暂存区,commit是将暂存区同步到master分支
3、将2修改为1,保存,不add不commit
即不add也不commit ,而且是建立在前一种情况下的修改,之前master分支已经和暂存区不同,现在工作区也和暂存区不同了
输入 git diff -- readme.txt
diff --git a/readme.txt b/readme.txt
index d8263ee..56a6051 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1 @@
-2
\ No newline at end of file
+1
\ No newline at end of file
提示不同的地方为2和1,所以比较的确实是暂存区与工作区
输入 git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index e440e5c..56a6051 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1 @@
-3
\ No newline at end of file
+1
\ No newline at end of file
提示不同的地方为2和1,所以比较的确实是master分支与工作区
输入 $ git diff --cached -- readme.txt
diff --git a/readme.txt b/readme.txt
index e440e5c..d8263ee 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1 @@
-3
\ No newline at end of file
+2
\ No newline at end of file
提示不同的地方为3和2,所以比较的确实是master分支与暂存区
撤回部分
一、假设你在一次commit后又对工作区的文件readme.txt进行了修改,然而你想撤回这个修改
二、假设你在一次commit后对工作区的文件readme.txt进行了修改,add了之后又修改了一次,你想撤销第二次修改
三、假设你在一次commit后对工作区的文件readme.txt进行了修改,add了之后又修改了一次,你想撤销到第一次修改之前
因为在第一次修改之后你add了一次,暂存区里的内容已经发生了改变,而你不需要这个改变,所以必须先恢复暂存区里的内容
git reset HEAD readme.txt
然后恢复工作区里的内容
git checkout -- readme.txt
四、你不小心完全删除了一个文件,无法通过操作系统找回,而你想恢复它
假设你在删除之前有过一次add,那么你可以直接用暂存区里的内容
git checkout -- readme.txt
注意,这个操作不仅可以覆盖,文件不存在时,可以直接创建该文件
如果你不想要那一次add的改变,那你需要两步走,同上
先恢复暂存区里的内容
git reset HEAD readme.txt
然后恢复工作区里的内容
git checkout -- readme.txt
五、你修改了一个文件,不仅add,而且还commit了,你想撤销这个修改
这个其实之前已经提到过了,直接用版本回退即可
git reset --hard HEAD^
之前提到过,HEAD^代表上个版本