git rmgit
git rm命令官方解釋shell
刪除的本質安全
在git中刪除一個文件,本質上是從tracked files中移除對這些文件的跟蹤。更具體地說,就是將這些文件從staging area移除。而後commit。ide
做用工具
git rm的做用就是將文件從暫存區刪除spa
git rm的做用就是將文件從工做目錄 和 暫存區 刪除。3d
git rm並不能僅僅刪除工做目錄中的文件,而暫存區保持不變。目前git也沒有提供任何參數支持這一功能。要想實現這一目標,只能使用Linux自帶的/bin/rm命令code
使用場景blog
完全刪除文件rem
所謂完全刪除文件,就是在工做目錄和暫存區刪除文件。因爲gir rm不能直接刪除工做目錄中的文件,因而使用/bin/rm手動刪除。此時執行git status 時就會在 「Changes not staged for commit」部分看到,表示沒有被更改沒有被暫存
$ rm PROJECTS.md $ git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in workingdirectory) deleted: PROJECTS.md no changes added to commit (use "git add" and/or "git commit -a")
而後再運行 git rm 將文件從暫存區移除
$ git rm PROJECTS.md rm 'PROJECTS.md' $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) deleted: PROJECTS.md
下一次提交時,該文件就再也不歸入版本管理了。
如今假設這樣一組場景,有文件file1.c,file2.c,file3.c。我把file1.c作了修改,而且git add到暫存區。這時候若是向上面那樣手動/bin/rm刪除file1.c,而後再git rm file1.c,這樣沒有任何問題。可是若是你跳過/bin/rm file1.c這一步,直接git rm file1.c是不被容許的,報錯
$ git rm file1.c error: the following file has changes staged in the index: file1.c (use --cached to keep the file, or -f to force removal)
必需要用強制刪除選項 -f(即 force 的首字母)。 這是一種安全特性,用於防止誤刪尚未添加到快照的數據,這樣的數據不能被 Git 恢復。
只刪除暫存區的文件
若是你想保留工做目錄中的文件,可是刪除對應暫存區中的文件。換句話說,你想讓這些保存在磁盤上的文件再也不被git跟蹤。請使用--cached 選項。爲啥會有這種奇怪的需求呢?假設這樣一種場景,你忘記了添加.gitignore文件,不當心把不少本應忽略的文件加到了暫存區,這時候就須要這裏介紹的作法了。
$ git rm --cached README
git rm 命令後面能夠列出文件或者目錄的名字,也可使用 glob 模式。 比方說:
$ git rm log/\*.log
注意到星號 * 以前的反斜槓 \, 由於 Git 有它本身的文件模式擴展匹配方式,因此咱們不用 shell 來幫忙展開。
此命令刪除 log/ 目錄下擴展名爲 .log 的全部文件。 相似的好比:
$ git rm \*~
該命令爲刪除以 ~ 結尾的全部文件。
git mv
不像其它的 VCS 系統,Git 並不顯式跟蹤文件移動操做。 若是在 Git 中重命名了某個文件,倉庫中存儲的元數據並不會體現出這是一次更名操做。 不過 Git 很是聰明,它會推斷出究竟發生了什麼。
你依然可使用$ git mv file_from file_to 對文件更名。它會恰如預期般正常工做。 實際上,即使此時查看狀態信息,也會明白無誤地看到關於重命名操做的說明:
$ git mv README.md README $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) renamed: README.md -> README
事實上,運行 git mv 就至關於運行了下面三條命令:
$ mv README.md README $ git rm README.md $ git add README
如此分開操做,Git 也會意識到這是一次更名,因此無論何種方式結果都同樣。 二者惟一的區別是,mv 是一條命令而另外一種方式須要三條命令,直接用 git mv 輕便得多。 不過有時候用其餘工具批處理更名的話,要記得在提交前刪除老的文件名,再添加新的文件名。