Day13|【Git】档案管理 - 档案还原 git checkout

当我们不小心把档案或目录删除时,有什麽办法可以还原档案呢?

git checkoutgit reset 指令可以解决这个问题。


git checkout

指令功能:还原「档案内容

与所在的 分支branch)有关

  • git checkout 指令 + 分支名称 —> Git 切换到指定的分支
  • git checkout 指令 + 档名 / 路径 —> Git 不会切换分支,而是把档案从 .git 目录里拉一份到目前的工作目录。

👉 此指令不会修改索引(即暂存区)所储存的管理资讯,而是将暂存区(Staging Area)里的内容、档案,覆盖工作目录(Working Directory)的内容或档案。

常用情况:

👉 档案已加入追踪,但想还原之前工作目录所做的修改。


🛠 实际操作

  1. 新增一个我们要编辑的档案

    $ touch index.html
    

    https://ithelp.ithome.com.tw/upload/images/20210927/20141010KA2yTWVs94.png

  2. 打开档案,编辑内容

    https://ithelp.ithome.com.tw/upload/images/20210927/20141010kkT0pLFyA3.png

    因为 git_practice 有被 Git 版本控制,所以在这个工作目录下的档案也都有被 Git 控制,此时用 Visual Studio Code 打开时可以看到有显示橘黄色的 M 。

    这是我第一次编辑的内容,要将这些内容加至暂存区

  3. 将刚刚所编辑的内容使用指令加至暂存区,并查看状态

    $ git add . # 将所有档案加至暂存区
    $ git status # 查看状态
    

    https://ithelp.ithome.com.tw/upload/images/20210927/20141010uivbCXvJbY.png

    档案状态可以看到显示为:Changes to be committed(modified)

    代表已加至暂存区,并等待提交。因为我们刚才是先新增 index.html 档案,然後有将档案编辑了内容,所以 Git 可以侦测到档案被修改(原本是空的变成有内容),因此状态为 modified

  4. 现在我们回到 index.html 档案,又新增了一行改变了内容

    https://ithelp.ithome.com.tw/upload/images/20210927/20141010gbuxuYFZYr.png

    变更内容後存档,并查看状态 git status

    https://ithelp.ithome.com.tw/upload/images/20210927/20141010oojYSMm58x.png

    可以看到红色的 modified: index.html ,这是 Git 有侦测到我们对档案做了修改,但这还只是在工作目录区所做的变动,并未加至暂存区,因此回馈讯里也说明可以使用 git add 加至暂存区并等待提交,或是使用 git checkout 舍弃这次在工作目录区所做的修改动作。

    那麽如果我已经存档了这次的更动,但後来觉得做错很多步骤,不想要这一次存挡前的变更,想找回上一次的档案内容,可以怎麽做呢?

  5. 输入 git checkout 指令,并查看状态

    $ git checkout index.html # 还原 index.html 的档案内容
    // git checkout + [档案名称]
    

    https://ithelp.ithome.com.tw/upload/images/20210927/20141010pRmr8ER9Wt.png

    输入指令後,回去看我们的 index.html 档案,会变成怎麽样呢?

    https://ithelp.ithome.com.tw/upload/images/20210927/20141010vtbXWRKk4h.png

    可以发现又再次回到原本的档案内容了!


复习 git checkout 的观念是:

  • 不会修改 master 的位置、负责移动 HEAD 指到不同地方的指令。(关於 master 、 HEAD 後续会说明)
  • 一个切换并记录现在档案状况的指令。
  • 并不会更改 索引区/暂存区 的资讯,而是只会更改目录内的资料。

<<:  Day13-React 表单验证篇-使用第三方函式库 Formik 进行表单的验证

>>:  Day 13 聪明对策面对严厉的规范

#13 Automation

自动化 (Automation) 指的是写出一个程序,让原本需要人工手动执行的多个步骤变成全部都由程...

【D23】制作讯号灯#6:使用三大法人制作讯号灯2之自营与投信

前言 顺利解读後,可以看得出来外资跟大盘有一定的连动性,而身为三大法人的另外两个为自营与投信单位,也...

# Day4--欸不是,还要再来一遍喔?回圈别闹了

在Swift里面,则有三种的回圈,如下所述: for…in loop while loop 我在思考...

[Android Studio 30天自我挑战] TableLayout元件对齐方式

TableLayout为表格布局,顾名思义就是利用表格方式来布局 TableLayout里面是透过T...

Day02 - 纯 Html - 简单型别 + 字串

简单型别 + 字串 简单型别定义 Case01 - 简单型别 Controller 预期 post ...