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文件不會被刪除。