iT邦幫忙

2021 iThome 鐵人賽

DAY 13
1
Modern Web

【Git】從零開始學習 Git - 30 天的學習筆記系列 第 13

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 後續會說明)
  • 一個切換並記錄現在檔案狀況的指令。
  • 並不會更改 索引區/暫存區 的資訊,而是只會更改目錄內的資料。

上一篇
Day12|【Git】檔案管理 - 忽略檔案 .gitignore
下一篇
Day14|【Git】檔案管理 - 檔案還原 git reset
系列文
【Git】從零開始學習 Git - 30 天的學習筆記30

尚未有邦友留言

立即登入留言