git rm 命令用于刪除文件。
git 的本地?cái)?shù)據(jù)管理分為三個(gè)區(qū):
工作區(qū)的文件 git add 后到暫存區(qū),暫存區(qū)的文件 git commit 后到版本庫(kù)。
用于刪除工作區(qū)的文件。
$ rm test.txt
使用 shell rm 命令刪除工作區(qū)文件,然后查看狀態(tài):
$ git status On branch master Changes not staged for commit: (use "git add/rm..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) deleted: test.txt no changes added to commit (use "git add" and/or "git commit -a")
shell rm 命令只是刪除了工作區(qū)的文件,并沒(méi)有刪除版本庫(kù)的文件。如果要?jiǎng)h除版本庫(kù)文件,還需要執(zhí)行下面的命令:
$ git add test.txt $ git commit -m "delete test"
或者
$ git commit -a -m "delete test"
test.txt 文件從工作區(qū)和版本庫(kù)中全部刪除。
刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū)。
注意:要?jiǎng)h除的文件必須沒(méi)有經(jīng)過(guò)修改,也就是說(shuō)和當(dāng)前版本庫(kù)文件的內(nèi)容相同,否則將會(huì)失敗。
執(zhí)行刪除命令:
$ git rm test.txt rm 'test.txt'
查看當(dāng)前狀態(tài)(成功刪除了工作區(qū)文件,并且將這次刪除放入暫存區(qū)。):
$ git status On branch master Changes to be committed: (use "git reset HEAD..." to unstage) deleted: test.txt
然后提交到版本庫(kù):
$ git commit -m "delete test" [master f05b05b] delete test 1 file changed, 3 deletions(-) delete mode 100644 test.txt
成功刪除了版本庫(kù)中 test.txt 文件。
如果文件修改過(guò)內(nèi)容,執(zhí)行結(jié)果如下:
error: the following file has local modifications: test.txt (use --cached to keep the file, or -f to force removal)
強(qiáng)制刪除工作區(qū)和暫存區(qū)文件,并且將這次刪除放入暫存區(qū)。
注意:要?jiǎng)h除的文件無(wú)論修改過(guò)還是未修改過(guò),無(wú)論是在工作區(qū)還是暫存區(qū),都會(huì)被強(qiáng)制刪除。
$ git rm -f test.txt rm 'test.txt'
查看狀態(tài)(成功刪除工作區(qū)和暫存區(qū)文件,并且將這次刪除放入暫存區(qū)):
$ git status On branch master Changes to be committed: (use "git reset HEAD..." to unstage) deleted: test.txt
然后提交到版本庫(kù):
$ git commit -m "delete test" [master 9d5d2d2] delete test 1 file changed, 3 deletions(-) delete mode 100644 test.txt
成功刪除了工作區(qū)、暫存區(qū)和版本庫(kù)的文件。
刪除暫存區(qū)文件,但保留工作區(qū)的文件,并且將這次刪除放入暫存區(qū)。
執(zhí)行刪除命令:
$ git rm --cached test.txt rm 'test.txt'
查看狀態(tài)(成功刪除暫存區(qū)文件,保留工作區(qū)文件,并且將這次刪除放入暫存區(qū),注意這里文件取消了跟蹤)。
$ git status On branch master Changes to be committed: (use "git reset HEAD..." to unstage) deleted: test.txt Untracked files: (use "git add ..." to include in what will be committed) test.txt
然后提交到版本庫(kù):
$ git commit -m "delete test" [master 223d609] delete test 1 file changed, 3 deletions(-) delete mode 100644 test.txt
刪除了暫存區(qū)和版本庫(kù)的文件,但保留了工作區(qū)的文件。
如果文件有修改并 git add 到暫存區(qū),再執(zhí)行 git rm --cached 和 git commit,那么保留的工作區(qū)文件是修改后的文件,同時(shí)暫存區(qū)的修改文件和版本庫(kù)的文件也被刪了。