10.2 删除文件

看看版本库当前的状态,暂存区和工作区都包含修改。


$git status-s

A hack-1.txt

M welcome.txt


在这个暂存区和工作区都包含文件修改的情况下,使用删除命令更具有挑战性。删除命令有多种使用方法,有的方法很巧妙,而有的方法则需要更多的输入。为了分别介绍不同的删除方法,还要使用上一章介绍的进度保存(git stash)命令。

保存进度。


$git stash

Saved working directory and index state WIP on master:2b31c19 Merge commit

'acc2f69'

HEAD is now at 2b31c19 Merge commit 'acc2f69'


再恢复进度。注意不要使用git stash pop,而是使用git stash apply,因为这个保存的进度要被多次用到。


$git stash apply

On branch master

Changes to be committed:

(use "git reset HEAD<file>…"to unstage)

#

new file:hack-1.txt

#

Changed but not updated:

(use "git add<file>…"to update what will be committed)

(use "git checkout—<file>…"to discard changes in working directory)

#

modified:welcome.txt

#


10.2.1 本地删除不是真的删除

当前工作区的文件有:


$ls

detached-commit.txt

hack-1.txt

new-commit.txt

welcome.txt


直接在工作区删除这些文件,会如何呢?


$rm*.txt


通过下面的命令,可以看到在暂存区(版本库)中的文件仍然存在,并未删除。


$git ls-files

detached-commit.txt

hack-1.txt

new-commit.txt

welcome.txt


从文件的状态来看,文件只是在本地进行了删除,尚未添加到暂存区(提交任务)中。也就是说:直接在工作区删除,对暂存区和版本库没有任何影响。


$git status

On branch master

Changes to be committed:

(use "git reset HEAD<file>…"to unstage)

#

new file:hack-1.txt

#

Changed but not updated:

(use "git add/rm<file>…"to update what will be committed)

(use "git checkout—<file>…"to discard changes in working directory)

#

deleted:detached-commit.txt

deleted:hack-1.txt

deleted:new-commit.txt

deleted:welcome.txt

#


从Git状态输出中可以看出,本地删除如果要反映在暂存区中应该用git rm命令,对不想删除的文件执行git checkout—<file>,可以让文件在工作区重现。