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
檔案不會被刪除。