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