git快速入门(四)解析部分

对上一篇关于工作区,暂存区以及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
        

可以看到,---代表的a版readme.txt,也就是master分支里的版本 ,+++代表b版也就是工作区里的版本

@@之间夹的是有区别的行号

-后面是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之前一定会有一次add,所以master分支和暂存区里的内容是一致的,此时想撤销commit后的修改的话只需用暂存区里的内容覆盖工作区里的内容即可
输入git checkout -- readme.txt,即可

二、假设你在一次commit后对工作区的文件readme.txt进行了修改,add了之后又修改了一次,你想撤销第二次修改

第二次修改前有一次add,此时保存到了暂存区,想撤销第二次修改的做法其实和上面一样
输入git checkout -- readme.txt,即可


三、假设你在一次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^代表上个版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值