開始前,先提個小小的觀念:
✏️ 在 Git 的世界裡,不管是新增、刪除或重新命名,都可以看為是一個「修改」的動作。
因此這篇所要介紹的刪除檔案指令 git rm
觀念其實跟之前有提到的新增檔案後提交是一樣的唷!
複習一下之前新增檔案與提交的過程 :
新增一個檔案 > git add (暫時區) > git commit(儲存區)
git add - 告知 git ,我們要「新增」的檔案有哪些
將此觀念套用到刪除檔案 git rm
:
刪除一個檔案 > git rm (暫時區) > git commit(儲存區)
git rm - 告知 git ,我們要「刪除」的檔案有哪些
這裡可以得到一個流程概念:
當我們要從 GIt 中刪除一個檔案時,檔案需要是已追蹤的檔案狀態,並且在 暫存區(Staging Area) 操作。
如果檔案還在工作目錄區時,執行 git rm 指令,會出現什麼訊息呢?
可以得到幾個參數,這些參數內容可以觀看 Git 文章說明 ,同時也有介紹到之後有哪些方法可以順利刪除檔案,在這裡我們只要記得,如果使用 git rm
指令,要確認檔案是在 暫存區(Staging Area) 才能正確執行。
git rm
rm 為 remove 的意思
🛠 實際操作
直接刪除檔案 rm
現在資料夾裡有一個 helloGit.html 檔案
使用 rm
系統指令,直接刪除檔案
$ rm helloGit.html # 刪除檔案 helloGit.html
// rm + [檔案名稱]
查看狀態 git status
$ git status # 查看檔案狀態
此時的檔案狀態為:Changes not staged for commit (deleted)
Changes not staged for commit
- 已更改 - 代表我們原本已經提交的版本,卻又再次修改(這裡的修改動作是刪除),所以這些檔案會被丟回工作目錄(WD)。因此我們需要再將檔案加入暫存區,並再次提交版本。
使用 git add
加到暫存區,再查看狀態
$ git add . # 將(在工作目錄的)檔案加至暫存區
//Enter 後
$ git status # 查看檔案狀態
此時的檔案狀態為: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
使用 git commit
指令將檔案提交至儲存庫
$ git commit -m"del file" # 提交檔案 - "紀錄訊息"
檔案提交後訊息回饋 - 提交到 master 、 SHA-1 校驗碼為 5ef6a5f 、一個檔案被更動
執行完後可以打開資料夾檢查,會發現檔案不見囉!
請 Git 幫忙刪除檔案 git rm
現在 git_practice 資料夾裡有個 helloGit2.html 檔案
使用 git rm
指令,請 Git 幫忙刪除檔案
$ git rm helloGit2.html # 刪除檔案 helloGit2.html
按下 Enter 後,終端機會回饋訊息 - rm 'helloGit2.html'
查看狀態 git status
- changes to be committed / deleted
$ git status # 查看檔案狀態
此時的檔案狀態為:Changes to be committed(deleted) - 等待提交
跟上一個方法一樣,但是直接透過 git rm 指令,我們可以減少一次步驟,直接加至暫存區(Staging Area)。
使用 git commit
指令將檔案提交至儲存庫
$ git commit -m"del file" # 提交檔案 - "紀錄訊息"
這樣整個使用 git 刪除檔案的流程就完成了,我們也可以再次使用 git status 指令看看現在的檔案狀態
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 控管的
輸入指令,並使用 git status 檢查檔案狀態
可以發現 file.html 檔案狀態變更成 Untracked ,代表現在沒有被 Git 版本追蹤。