git操做之二:git restore

在上篇博客中留了一個問題,那就是git restore命令是作什麼的,下面重點分析。java

1、概述

git restore命令是撤銷的意思,也就是把文件從緩存區撤銷,回到未被追蹤的狀態。git

該命令有git restore <file>和git restore --staged <file>兩種經常使用的用法。緩存

2、詳述

在git中有工做區、暫存區、倉庫區(本地代碼區)三部分,要注意git restore命令在工做區是不會其做用的,也就是一個文件在工做區,使用git restore是不起做用的。以下圖spa

MyFirst2.java該文件未被加入暫存區,也就是未使用過git add MyFirst2.java命令,那麼使用git restore命令以下,3d

可見使用git restore命令報錯。從使用git status命令查看的結果也能夠看出,對應在工做區未使用過git add命令的文件,是untracked files的文件,須要使用git add命令,加入暫存區,那麼放到暫存區的文件如何回到工做區那,下面再看下git status 的截圖rest

從上面的圖片中知道MyFirst.java在暫存區中,看上邊的提示git restore --staged <file>也就是使用該命令能夠把文件從暫存區撤銷到工做區(前提是該文件未被修改),下面使用git restore --staged <file>命令的截圖code

從上圖中能夠看到暫存區中已無該文件,而在untracked files(工做區)中有src/文件夾(該文件夾下的因此文件均未被追蹤),下面使用git add src/命令,blog

能夠看到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>後文件被加到了暫存區,須要從新提交到本地倉庫。

3、總結

本文分析了git restore --stage <file>和git restore <file>兩個命令,總結以下,

一、文件在暫存區且未做修改的狀況

使用git restore --staged <file> 把文件從暫存區移動到工做區,即文件不被追蹤;

二、文件在暫存區且已經修改的狀況

使用git restore --staged <file> 把文件從暫存區移動到工做區,且不會撤銷修改的內容;

使用git restore <file> 文件仍在暫存區且會撤銷文件修改的內容;

三、文件在本地代碼庫已經修改的狀況

使用git add <file> 把文件從新放到暫存區,且保留文件的修改;

使用git restore <file> 文件仍在本地代碼庫且會撤銷文件的修改;

對於git restore <file>命令,會撤銷文件的修改,使文件恢復到暫存區或本地代碼庫(取決於文件在修改前的狀態);

對於git restore --staged <file>命令,把文件從暫存區撤回到工做區,保留文件最後一次修改的內容;

 

有不正之處,歡迎指正,感謝!

相關文章
相關標籤/搜索