設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 無更改
-
2.50.0
2025-06-16
- 2.43.1 → 2.49.1 無更改
-
2.43.0
2023-11-20
- 2.34.1 → 2.42.4 無變化
-
2.34.0
2021-11-15
- 2.32.1 → 2.33.8 無更改
-
2.32.0
2021-06-06
- 2.26.1 → 2.31.8 無變化
-
2.26.0
2020-03-22
- 2.16.6 → 2.25.5 無變化
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
- 2.1.4 → 2.12.5 無變化
-
2.0.5
2014-12-17
概要
git
rm
[-f
|--force
] [-n
] [-r
] [--cached
] [--ignore-unmatch
] [--quiet
] [--pathspec-from-file=
<file> [--pathspec-file-nul
]] [--
] [<pathspec>…]
描述
從索引中,或從工作區和索引中移除與路徑規格匹配的檔案。git
rm
不會僅從你的工作目錄中移除檔案。(沒有隻從工作區移除檔案而保留在索引中的選項;如果你想這樣做,請使用 /bin/rm
。)被移除的檔案必須與分支的尖端相同,並且索引中不能暫存其內容的任何更新,儘管此預設行為可以透過 -f
選項覆蓋。當給定 --cached
時,暫存的內容必須與分支的尖端或磁碟上的檔案匹配,允許僅從索引中移除檔案。當使用稀疏檢出(參見 git-sparse-checkout[1])時,git
rm
將僅移除稀疏檢出模式內的路徑。
選項
- <pathspec>...
-
要移除的檔案。可以指定一個開頭的目錄名(例如
dir
以移除dir/file1
和dir/file2
),以移除該目錄中的所有檔案以及所有子目錄,但這需要顯式地給定-r
選項。該命令只移除 Git 已知的路徑。
檔案萬用字元匹配會跨越目錄邊界。因此,給定兩個目錄
d
和d2
,使用git
rm
d*'
和git
rm
d/*'
之間存在差異,因為前者也會移除整個目錄d2
。更多詳情,請參閱 gitglossary[7] 中的 <pathspec> 條目。
-f
--force
-
覆蓋最新檢查。
-n
--dry-run
-
不要實際移除任何檔案。相反,只顯示它們是否存在於索引中,並且否則會被命令移除。
-r
-
當給定開頭的目錄名時,允許遞迴移除。
--
-
此選項可用於將命令列選項與檔案列表分開(當檔名可能被誤認為是命令列選項時很有用)。
--cached
-
使用此選項僅從索引中取消暫存並移除路徑。工作區檔案,無論是否修改過,都將保持不變。
--ignore-unmatch
-
即使沒有檔案匹配,也以零狀態退出。
--sparse
-
允許更新稀疏檢出錐體之外的索引條目。通常,
git
rm
會拒絕更新路徑不適合稀疏檢出錐體內的索引條目。更多資訊請參見 git-sparse-checkout[1]。 -q
--quiet
-
git
rm
通常會為每個移除的檔案輸出一行(以rm
命令的形式)。此選項會抑制該輸出。 --pathspec-from-file=
<file>-
路徑規格透過 <file> 而非引數傳遞。如果 <file> 正好是
-
,則使用標準輸入。路徑規格元素透過 LF 或 CR/LF 分隔。路徑規格元素可以像配置變數core.quotePath
(參見 git-config[1])所解釋的那樣引用。另請參見--pathspec-file-nul
和全域性的--literal-pathspecs
。 --pathspec-file-nul
-
僅在與
--pathspec-from-file
一起使用時有意義。路徑規範元素由 NUL 字元分隔,所有其他字元都被視為字面值(包括換行符和引號)。
移除從檔案系統中消失的檔案
git
rm
沒有選項可以僅從索引中移除已從檔案系統中消失的路徑。但是,根據用例,有幾種方法可以實現這一點。
使用 “git commit -a”
如果你希望下一次提交記錄工作區中所有跟蹤檔案的修改,並記錄透過 rm
(而不是 git
rm
)從工作區移除的所有檔案的刪除,請使用 git
commit
-a
,因為它會自動檢測並記錄所有刪除。你也可以透過使用 git
add
-u
在不提交的情況下達到類似的效果。
使用 “git add -A”
當接受供應商分支的新程式碼時,你可能希望同時記錄路徑的刪除、新路徑的新增以及現有路徑的修改。
通常,你會首先使用此命令從工作區中移除所有跟蹤檔案
git ls-files -z | xargs -0 rm -f
然後解壓新程式碼到工作區。或者你也可以將更改 rsync 到工作區。
之後,記錄工作區中所有刪除、新增和修改的最簡單方法是
git add -A
參見 git-add[1]。
子模組
只有使用 gitfile 的子模組(這意味著它們是用 Git 1.7.8 或更高版本克隆的)才會被從工作區中移除,因為它們的倉庫位於超專案的 .git
目錄內。如果子模組(或其內部巢狀的子模組之一)仍使用 .git
目錄,git
rm
會將子模組的 git 目錄移動到超專案的 git 目錄中,以保護子模組的歷史記錄。如果存在,gitmodules[5] 檔案中的 submodule.
<name> 部分也將被移除,並且該檔案將被暫存(除非使用了 --cached
或 -n
)。
當 HEAD
與索引中記錄的相同,沒有跟蹤檔案被修改,並且子模組工作區中不存在未被忽略的未跟蹤檔案時,子模組被認為是最新。被忽略的檔案被認為是可消耗的,並且不會阻止子模組工作區的移除。
如果你只想從工作區中移除子模組的本地檢出而不提交刪除,請改用 git-submodule[1] deinit
。有關子模組移除的詳細資訊,另請參見 gitsubmodules[7]。
BUG
每次超專案更新移除一個已填充的子模組(例如在刪除前後的提交之間切換時),一個過時的子模組檢出將保留在舊位置。僅當舊目錄使用 gitfile 時,移除它是安全的,否則子模組的歷史記錄也將被刪除。當遞迴子模組更新實現後,此步驟將變得過時。