zoukankan      html  css  js  c++  java
  • git操作之二:git restore

    在上篇博客中留了一个问题,那就是git restore命令是做什么的,下面重点分析。

    一、概述

    git restore命令是撤销的意思,也就是把文件从缓存区撤销,回到未被追踪的状态。

    该命令有git restore <file>和git restore --staged <file>两种常用的用法。

    二、详述

    在git中有工作区、暂存区、仓库区(本地代码区)三部分,要注意git restore命令在工作区是不会其作用的,也就是一个文件在工作区,使用git restore是不起作用的。如下图

    MyFirst2.java该文件未被加入暂存区,也就是未使用过git add MyFirst2.java命令,那么使用git restore命令如下,

    可见使用git restore命令报错。从使用git status命令查看的结果也可以看出,对应在工作区未使用过git add命令的文件,是untracked files的文件,需要使用git add命令,加入暂存区,那么放到暂存区的文件如何回到工作区那,下面再看下git status 的截图

    从上面的图片中知道MyFirst.java在暂存区中,看上边的提示git restore --staged <file>也就是使用该命令可以把文件从暂存区撤销到工作区(前提是该文件未被修改),下面使用git restore --staged <file>命令的截图

    从上图中可以看到暂存区中已无该文件,而在untracked files(工作区)中有src/文件夹(该文件夹下的所以文件均未被追踪),下面使用git add src/命令,

    可以看到src下的两个文件均添加到了暂存区。现在把MyFirst.java文件进行修改,如下

    package cn.com.my;
    
    public class MyFirst {
        public static void main(String[] args) {
            System.out.println("a");
    
        }
    
    }

    使用git status查看状态,

    从上面可以看出MyFirst.java出现了两次,第一次提示是使用git restore --stage <file>,下面使用该命令并查看git的状态

    可以看到MyFirst.java从暂存区被移除了,现在看文件本身是否有变化

    package cn.com.my;
    
    public class MyFirst {
        public static void main(String[] args) {
            System.out.println("a");
    
        }
    
    }

    从上面看无变化,也就是git restore --staged <file> 会把文件从暂存区移除,文件的修改不会受影响。下面看第二种情况。再贴上上面的图,

    此时MyFirst.java是下面的样子,

    package cn.com.my;
    
    public class MyFirst {
        public static void main(String[] args) {
            System.out.println("a");
            System.out.println("b");
    
        }
    
    }

    此时,使用git restore <file>命令并查看状态,

    此时,查看MyFirst.java文件的内容,

    package cn.com.my;
    
    public class MyFirst {
        public static void main(String[] args) {
            System.out.println("a");
    
        }
    
    }

    看到文件的内容第二行打印没有了,为什么那,因为第二行打印是再把MyFirst.java加到暂存区后新增的,也就是在把文件加到暂存区后对文件进行修改,再执行git restore <file>会撤销文件的修改,撤销到最近一次执行git add的内容。

    下面把MyFirst提交到本地仓库,提交后的内容为,

    package cn.com.my;
    
    public class MyFirst {
        public static void main(String[] args) {
            System.out.println("a");
    
        }
    
    }

    在该基础上进行修改,修改为下面的内容,

    package cn.com.my;
    
    public class MyFirst {
        public static void main(String[] args) {
            System.out.println("a");
            System.out.println("提交后修改");
    
        }
    
    }

    下面看git的状态,

    看到上边给出了两个提示,先使用git restore <file>命令,

    文件内容,

    package cn.com.my;
    
    public class MyFirst {
        public static void main(String[] args) {
            System.out.println("a");
    
        }
    
    }

    可以看到使用git restore <file>后文件恢复为提交的状态。如果是使用git add命令,

    可以看到使用了git add <file>后文件被加到了暂存区,需要重新提交到本地仓库。

    三、总结

    本文分析了git restore --stage <file>和git restore <file>两个命令,总结如下,

    1、文件在暂存区且未作修改的情况

    使用git restore --staged <file> 把文件从暂存区移动到工作区,即文件不被追踪;

    2、文件在暂存区且已经修改的情况

    使用git restore --staged <file> 把文件从暂存区移动到工作区,且不会撤销修改的内容;

    使用git restore <file> 文件仍在暂存区且会撤销文件修改的内容;

    3、文件在本地代码库已经修改的情况

    使用git add <file> 把文件重新放到暂存区,且保留文件的修改;

    使用git restore <file> 文件仍在本地代码库且会撤销文件的修改;

    对于git restore <file>命令,会撤销文件的修改,使文件恢复到暂存区或本地代码库(取决于文件在修改前的状态);

    对于git restore --staged <file>命令,把文件从暂存区撤回到工作区,保留文件最后一次修改的内容;

    有不正之处,欢迎指正,感谢!

  • 相关阅读:
    (转)排序算法——归并排序与递归
    在serviceImpl里使用自身的方法
    hibernate manytoone中的lazy EAGER
    autowire异常的三个情况
    (转)js的call和apply
    mysql创建外键出错(注意数据库表字段排序)
    easyui datagrid
    ava.lang.NullPointerException的一般解决方法
    spring简单事务管理器
    关于使用注解出现BeanCreationException或者NameNotFoundException的解决方法
  • 原文地址:https://www.cnblogs.com/teach/p/13997323.html
Copyright © 2011-2022 走看看