iT邦幫忙

2021 iThome 鐵人賽

DAY 10
2

開始前,先提個小小的觀念:

✏️ 在 Git 的世界裡,不管是新增、刪除或重新命名,都可以看為是一個「修改」的動作。

因此這篇所要介紹的刪除檔案指令 git rm 觀念其實跟之前有提到的新增檔案後提交是一樣的唷!

複習一下之前新增檔案與提交的過程 :

新增一個檔案 > git add (暫時區) > git commit(儲存區)
git add - 告知 git ,我們要「新增」的檔案有哪些

將此觀念套用到刪除檔案 git rm

刪除一個檔案 > git rm (暫時區) > git commit(儲存區)
git rm - 告知 git ,我們要「刪除」的檔案有哪些

這裡可以得到一個流程概念:

當我們要從 GIt 中刪除一個檔案時,檔案需要是已追蹤的檔案狀態,並且在 暫存區Staging Area) 操作。

如果檔案還在工作目錄區時,執行 git rm 指令,會出現什麼訊息呢?

https://ithelp.ithome.com.tw/upload/images/20210924/20141010n6qjbuiedV.png

可以得到幾個參數,這些參數內容可以觀看 Git 文章說明 ,同時也有介紹到之後有哪些方法可以順利刪除檔案,在這裡我們只要記得,如果使用 git rm 指令,要確認檔案是在 暫存區Staging Area) 才能正確執行。


刪除檔案 git rm

rm 為 remove 的意思

🛠 實際操作

直接刪除檔案 rm

  1. 現在資料夾裡有一個 helloGit.html 檔案

    https://ithelp.ithome.com.tw/upload/images/20210924/20141010D6ZVaQu26T.png

  2. 使用 rm 系統指令,直接刪除檔案

    $ rm helloGit.html # 刪除檔案 helloGit.html
    // rm + [檔案名稱]
    

    https://ithelp.ithome.com.tw/upload/images/20210924/20141010Ly1nroLXIy.png

  3. 查看狀態 git status

    $ git status # 查看檔案狀態
    

    https://ithelp.ithome.com.tw/upload/images/20210924/20141010TSlPyPiPwe.png

    此時的檔案狀態為:Changes not staged for commit (deleted)

    Changes not staged for commit - 已更改 - 代表我們原本已經提交的版本,卻又再次修改(這裡的修改動作是刪除),所以這些檔案會被丟回工作目錄WD)。因此我們需要再將檔案加入暫存區,並再次提交版本。

  4. 使用 git add 加到暫存區,再查看狀態

    $ git add . # 將(在工作目錄的)檔案加至暫存區
    //Enter 後
    $ git status # 查看檔案狀態
    

    https://ithelp.ithome.com.tw/upload/images/20210924/20141010ob0N1bOZgb.png

    此時的檔案狀態為:Changes to be committed(deleted)

    Changes to be committed - 等待提交 - 原先在工作目錄區的檔案經由 git add 指令後,被放置在暫存區(Staging Area),這時候檔案狀態變成等待著提交。接下來就只要執行 git commit 指令就可以提交完成囉!

    這邊補充一下,有查詢到其他文章說,本來 git add 是不能將刪除的檔案加入至暫存區,正確方式是使用 git add -u 指令來加入被更動的檔案,包含 modified 及 deleted 檔案。不過現在某些新版的 Git 是已經可以直接使用 fit add 指令來新增要被刪除的檔案。

    $ git add -u        # 一次加入所有被更動的檔案,包含 modified 及 deleted
    $ git add --update  # 同上
    // -u **等同於** --update
    
  5. 使用 git commit 指令將檔案提交至儲存庫

    $ git commit -m"del file" # 提交檔案 - "紀錄訊息"
    

    https://ithelp.ithome.com.tw/upload/images/20210924/20141010ywu9nzfLyP.png

    檔案提交後訊息回饋 - 提交到 master 、 SHA-1 校驗碼為 5ef6a5f 、一個檔案被更動

    執行完後可以打開資料夾檢查,會發現檔案不見囉!

請 Git 幫忙刪除檔案 git rm

  1. 現在 git_practice 資料夾裡有個 helloGit2.html 檔案

    https://ithelp.ithome.com.tw/upload/images/20210924/20141010mTewxr0OmB.png

  2. 使用 git rm 指令,請 Git 幫忙刪除檔案

    $ git rm helloGit2.html # 刪除檔案 helloGit2.html
    

    https://ithelp.ithome.com.tw/upload/images/20210924/201410107FlxJbQvAW.png

    按下 Enter 後,終端機會回饋訊息 - rm 'helloGit2.html'

  3. 查看狀態 git status - changes to be committed / deleted

    $ git status # 查看檔案狀態
    

    https://ithelp.ithome.com.tw/upload/images/20210924/20141010URc0bjmYsO.png

    此時的檔案狀態為:Changes to be committed(deleted) - 等待提交

    跟上一個方法一樣,但是直接透過 git rm 指令,我們可以減少一次步驟,直接加至暫存區(Staging Area)。

  4. 使用 git commit 指令將檔案提交至儲存庫

    $ git commit -m"del file" # 提交檔案 - "紀錄訊息"
    

    https://ithelp.ithome.com.tw/upload/images/20210924/20141010lEkQdmlo1h.png

    這樣整個使用 git 刪除檔案的流程就完成了,我們也可以再次使用 git status 指令看看現在的檔案狀態

    https://ithelp.ithome.com.tw/upload/images/20210924/201410103potaJxOia.png

    nothing to commit - 沒有檔案內容可以提交

💡 總結:
兩者差異 -> git rm 可將原本兩段式需要透過 git add 提交的動作,直接縮短成一個指令。


加上 --cached 參數 - 想要讓檔案不再被 Git 版本控制,而不是真的完全刪除

當我們使用 rm 、 git rn 指令時,可以發現在資料夾上的工作目錄都是直接將檔案移除,如果今天只是想讓檔案不再被 Git 控管,但是檔案依然留在資料夾裡,那麼可以使用 --cached 參數執行我們的需求。

$ git rm file.html --cached # 移除 file.html 將之不再被 git 控管

確認現在有個 file.html 檔案是被 Git 控管的

https://ithelp.ithome.com.tw/upload/images/20210924/20141010tpq8rYyoWX.png

輸入指令,並使用 git status 檢查檔案狀態

https://ithelp.ithome.com.tw/upload/images/20210924/20141010GDwk4ioAAa.png

可以發現 file.html 檔案狀態變更成 Untracked ,代表現在沒有被 Git 版本追蹤。


上一篇
Day9|工作區、暫存區、儲存庫,以及各執行的檔案狀態
下一篇
Day11|【Git】檔案管理 - 重新命名檔案 git mv
系列文
【Git】從零開始學習 Git - 30 天的學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言