git rm命令


git rm命令用於從工作區和索引中刪除檔案。

簡介

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…

描述

從索引中刪除檔案,或從工作樹和索引中刪除檔案。 git rm不會從您的工作目錄中刪除檔案。 (沒有任何選項只能從工作樹中刪除檔案,並將其保留在索引中;)要刪除的檔案必須與分支的提示相同,並且在索引中不能對其內容進行更新,儘管可以使用-f選項覆蓋(預設行為)。 當給出--cached時,暫存區內容必須與分支的提示或磁碟上的檔案相匹配,從而僅將檔案從索引中刪除。

使用 git rm 來刪除檔案,同時還會將這個刪除操作記錄下來;而使用 rm 來刪除檔案,僅僅是刪除了物理檔案,沒有將其從 git 的記錄中剔除。

直觀的來講,git rm 刪除過的檔案,執行 git commit -m "commit message or mark" 提交時,會自動將刪除該檔案的操作提交上去。

而對於用 rm 命令直接刪除的檔案,執行 git commit -m "commit message or mark"提交時,則不會將刪除該檔案的操作提交上去。不過不要緊,即使你已經通過 rm 將某個檔案刪除掉了,也可以再通過 git rm 命令重新將該檔案從 git 的記錄中刪除掉,
這樣的話,在執行 git commit -m "commit message or mark" 以後,也能將這個刪除操作提交上去。

如果之前不小心用 rm 命令刪除了一大批檔案呢?如此時用 git rm 逐個地再刪除一次就顯得相當卵痛了。可如下的方式做提交: git commit -am "commit message or mark"

範例

以下是一些範例 -

在git中我們可以通過git rm命令把一個檔案刪除,並把它從git的倉庫管理系統中移除。但是注意最後要執行git commit才真正提交到git倉庫。

範例1

刪除text1.txt檔案,並把它從git的倉庫管理系統中移除。

git rm text1.txt

範例2

刪除檔案夾:mydir,並把它從git的倉庫管理系統中移除。

git rm -r mydir

範例3


$ git add 10.txt
$ git add -i
           staged     unstaged path
  1:        +0/-0      nothing 10.txt
  2:        +0/-0      nothing branch/t.txt
  3:        +0/-0      nothing branch/t2.txt

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> 7
Bye.
$ git rm --cached 10.txt
rm '10.txt'
$ ls
10.txt  2  3.txt  5.txt  readme.txt
$ git add -i
           staged     unstaged path
  1:        +0/-0      nothing branch/t.txt
  2:        +0/-0      nothing branch/t2.txt
*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp

在通過 git add 10.txt 命令把檔案10.txt新增到索引庫中後,又通過 git rm --cached 10.txt 把檔案10.txt從git的索引庫中移除,但是對檔案10.txt本身並不進行任何操作。

另外對於已經被git rm刪除掉(還沒被提交)的檔案或目錄,如果想取消其操作的話,可以首先通過git add -i的子命令revert從索引庫中把它們剔除,然後用git checkout <檔案> 命令來達到取消的目。

範例4

$ git rm Documentation/\*.txt

Documentation目錄及其任何子目錄下的索引中刪除所有.txt檔案。

範例5

git rm -f git-*.sh

因為這個例子讓shell擴充套件星號(即顯式列出檔案),它不會刪除子目錄中的檔案,如:subdir/git-foo.sh檔案不會被刪除。