設定和配置
取得和建立專案
基本快照
分支和合併
共享和更新專案
檢查和比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.43.1 → 2.47.0 無變更
-
2.43.0
11/20/23
- 2.34.1 → 2.42.3 無變更
-
2.34.0
11/15/21
- 2.32.1 → 2.33.8 無變更
-
2.32.0
06/06/21
- 2.26.1 → 2.31.8 無變更
-
2.26.0
03/22/20
- 2.16.6 → 2.25.5 無變更
-
2.15.4
12/06/19
-
2.14.6
12/06/19
-
2.13.7
05/22/18
- 2.1.4 → 2.12.5 無變更
-
2.0.5
12/17/14
概要
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
只會移除稀疏檢出模式中的路徑。
選項
- <路徑規格>…
-
要移除的檔案。可以給定一個前導目錄名稱(例如,
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=<檔案>
-
路徑規格在
<檔案>
中傳遞,而不是在命令列引數中傳遞。如果<檔案>
正好是-
,則會使用標準輸入。路徑規格元素以 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] 檔案中的子模組.<名稱> 區段,並且該檔案將會被暫存(除非使用 --cached 或 -n)。
當 HEAD 與索引中記錄的相同時,當沒有修改追蹤的檔案時,以及當子模組的工作樹中不存在未追蹤且未忽略的檔案時,子模組會被視為是最新的。忽略的檔案會被視為可有可無,並且不會阻止移除子模組的工作樹。
如果您只想從您的工作樹中移除子模組的本機檢出,而無需提交移除,請改用 git-submodule[1] deinit
。另請參閱 gitsubmodules[7] 以取得有關子模組移除的詳細資訊。
錯誤
每次超專案更新移除已填入的子模組時(例如,在移除之前和之後在提交之間切換時),舊位置中將保留過時的子模組檢出。只有在舊目錄使用 gitfile 時,移除舊目錄才是安全的,否則子模組的歷史記錄也會被刪除。當實作遞迴子模組更新時,此步驟將會過時。
GIT
屬於 git[1] 套件的一部分