設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 → 2.52.0 無更改
-
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
概要
gitrm[-f|--force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--pathspec-from-file=<file> [--pathspec-file-nul]] [--] [<pathspec>…]
描述
從索引中移除匹配 pathspec 的檔案,或者從工作目錄和索引中移除。git rm 不會僅從工作目錄中移除檔案。(沒有選項可以僅從工作目錄移除檔案但保留在索引中;如果要做這個,請使用 /bin/rm。)要移除的檔案必須與分支的最新提交相同,並且其內容不能有任何暫存的更新,儘管預設行為可以透過 -f 選項覆蓋。當給出 --cached 時,暫存的內容必須與分支的最新提交或磁碟上的檔案匹配,允許僅從索引中移除檔案。當使用稀疏檢出時(參見 git-sparse-checkout[1]),git rm 將只移除稀疏檢出模式下的路徑。
選項
- <pathspec>...
-
要移除的檔案。可以給出一個前導目錄名(例如,要移除
dir/file1和dir/file2的dir)來移除目錄中的所有檔案,以及遞迴地移除所有子目錄,但這需要顯式給出-r選項。命令只移除 Git 已知的路徑。
檔案 globbing 會跨越目錄邊界進行匹配。因此,給定兩個目錄
d和d2,使用gitrmd*'和gitrmd/*'之間存在差異,因為前者還會移除目錄d2的全部內容。更多詳情,請參見 gitglossary[7] 中 <pathspec> 條目。
-f--force-
覆蓋“尚未更新”的檢查。
-n--dry-run-
實際上不移除任何檔案。相反,只顯示它們是否在索引中並且會(否則)被命令移除。
-r-
當給出前導目錄名時,允許遞迴移除。
---
此選項可用於區分命令列選項和檔案列表(當檔名可能被誤認為是命令列選項時很有用)。
--cached-
使用此選項可僅從索引中取消暫存並移除路徑。工作目錄檔案,無論是否修改,都將保持不變。
--ignore-unmatch-
即使沒有檔案匹配,也以零狀態退出。
--sparse-
允許更新稀疏檢出錐體之外的索引條目。通常,
gitrm會拒絕更新不適合稀疏檢出錐體的路徑的索引條目。更多資訊請參見 git-sparse-checkout[1]。 -q--quiet-
gitrm通常會為每個移除的檔案輸出一行(以rm命令的形式)。此選項會抑制該輸出。 --pathspec-from-file=<file>-
Pathspec 在 <file> 中而不是在引數中傳遞。如果 <file> 是
-,則使用標準輸入。Pathspec 元素由 LF 或 CR/LF 分隔。Pathspec 元素可以按照core.quotePath配置變數的解釋進行引用(參見 git-config[1])。另請參見--pathspec-file-nul和全域性--literal-pathspecs。 --pathspec-file-nul-
僅在與
--pathspec-from-file一起使用時有意義。路徑規範元素由 NUL 字元分隔,所有其他字元都被視為字面值(包括換行符和引號)。
移除在檔案系統中已消失的檔案
git rm 沒有用於僅從索引中移除已從檔案系統中消失的路徑的選項。但是,根據用例,有幾種方法可以做到這一點。
使用“git commit -a”
如果你打算讓下一次提交記錄工作目錄中所有已跟蹤檔案的修改,並記錄已從工作目錄中移除的檔案(與 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 檔案中的 submodule.<name> 部分也會被移除,並且該檔案會被暫存(除非使用了 --cached 或 -n)。
當 HEAD 與索引中記錄的一致、沒有已修改的跟蹤檔案且子模組的工作目錄中沒有未被忽略的未跟蹤檔案時,該子模組被認為是“最新”的。被忽略的檔案被視為可消耗的,不會阻止子模組的工作目錄被移除。
如果你只想從工作目錄中移除子模組的本地簽出而不提交移除操作,請改用 git-submodule[1] deinit。另請參見 gitsubmodules[7] 以獲取有關子模組移除的詳細資訊。
BUG
每次超專案更新移除一個已填充的子模組時(例如,在移除之前和之後切換提交時),舊位置會留有一個過時的子模組簽出。只有當舊目錄使用 gitfile 時,移除舊目錄才是安全的,否則子模組的歷史記錄也會被刪除。當遞迴子模組更新實現後,此步驟將變得不必要。