前面说了,在Git的世界里,有三个地方:工作区,暂存区和版本库。Git的目标就是让工作区里的东西和版本库里的东西变得一样。你在工作区里修改了一个文件,你最终也希望版本库里也做了相应的修改。
这是没有问题的。
如果要删除文件呢?
事实上,删除文件也是一种修改,因为工作区里的东西发生了变化。
举个例子,我们新创建一个文件,然后git add,再git commit:
$ touch new_file.md
$ git add new_file.md
$ git commit -m "add new_file.md"
[master 9e623e1] add new_file.md
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 new_file.md
然后你再把它删了
$ rm -f new_file.md
这时候Git发现你在工作目录里删了一个文件,但是Git的版本库里仍然还存在着new_file.md。
$ git status
On branch 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 working directory)
deleted: new_file.md
no changes added to commit (use "git add" and/or "git commit -a")
如果你确定真的要把new_file.md删除掉,那就需要使用另一个命令:
git rm file
$ git rm new_file.md
rm 'new_file.md'
还没完,你再git status一下,发现你的操作还没有正式提交:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: new_file.md
你需要再次git commit
$ git commit -m "remove new_file.md"
[master 81fee10] remove new_file.md
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 new_file.md
现在new_file.md已经真正的从版本库中删除了。
你可能会问:你不是说,删除也是一种修改吗?那么为什么不能像其他类型的修改一样,直接git add再git commit呢?还需要为删除特意弄一个命令git rm干什么?这不多此一举吗?
你这样问是合理的,但是你别忘了,git add命令后面要加一个文件名作为参数,表示说要把某个文件添加到暂存区,而你都已经把这个文件删除了,你又要到哪里去找这个文件呢?不是吗?既然工作区里的这个文件没了,而版本库里还有,你只能手动的把版本库里的删掉。
如果你在工作区删了一个文件以后,又后悔了,想恢复它怎么办?那很简单,git checkout -- file,把工作区的“修改”杀掉,这样删掉的文件又回到了工作区。但是你只能恢复文件到最新版本。
如果喜欢的话,可以关注我的微博http://weibo.com/qiaoer2017
网友评论