Git工作原理之增删查改
一般来讲,Git在工作时有两个区,一个工作区,一个暂存区。一个文件夹就是一个工作区,所有的操作在文件夹内进行。暂存区请看下文。
1.工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
2.前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
在添加文件修改文件这些操作之后用git add命令将文件添加到暂存区。
如下图,此时工作区有两个文件已添加至暂存区,然后git commit添加至分支即可。
3.Git的管理修改
Git只负责管理文件,修改之后必须要用git add命令先添加到暂存区,然后再用git commit命令将其提交至版本库。
下面是一些常见操作:
撤销修改:
$ git checkout -- readme.txt
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
若为第二种情况且需要退回至工作区,用命令git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),重新放回工作区:
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
删除文件:
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm
命令删了:
这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status
命令会立刻告诉你哪些文件被删除了:
$ 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: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm
删掉,并且git commit
:
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt
game over 详见Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)
- 点赞
- 收藏
- 关注作者
评论(0)