Git文件修改,撤销修改,删除

参考廖老师教程

Git和其他版本控制系统比如SVN的一个不同之处就是有暂存区的概念。

工作区

在电脑里能看到的目录,比如我的仓库 flask_case 文件夹就是一个工作区:

版本库

工作区有一个隐藏的目录 .git ,这不能算是一个工作区,因为它是隐藏的,它是Git的版本库。

Git的版本库里存了很多的东西,其中最重要的是index(或者叫stage)的暂存区,还有Git为我们自动创建的第一个分支master(我们创建的那个仓库文件夹就是),以及指向master的一个指针叫HEAD

我们将文件往Git版本库里添加的时候,是分两步执行的:

第一步:使用 git add命令将文件添加进去,这里实际是将文件修改添加到暂存区;

第二步:使用git commit提交修改,实际就是将暂存区的所有内容提交到当前分支;

因为我们创建Git版本库时,Git自动为我们创建了唯一一个 master 分支,所以 git commit 就是往master分支上提交修改。

也就是说,需要提交的文件修改通通在暂存区呆着,然后git commit 一次性提交暂存区的所有修改。

这里先对 readme.txt做个修改,然后再到工作区中新增一个test文件,最后用git status查看下状态:

Git提示,readme.txt被修改了,而test从来没有被添加过,所有状态为Untracked。

现在需要执行git add 将readme.txt和test添加到暂存区里面,然后在git status查看如下,

现在,暂存区的状态就变成下面重要的状态了:

所有,git add 命令实际就是把要提交的所有修改放到了暂存区中,,然后执行git commit 就可以一次性把暂存区的所有修改提交到分支。

提交后,如果没有戳工作区再做修改,那么工作区就是"干净的":

此时提交后的版本库就变成了如下状态,而暂存区就没有任何内容了:


管理修改

Git比其他版本控制系统优秀的地方就在于Git跟踪并管理的是修改,而非文件。

举例说明如下,首先我们对readme.txt文件做一个修改,这里我随便添加了些内容;

然后添加到暂存区,查看状态;

然后再修改readme.txt

然后我开始提交:

我再查看git的状态,这里感觉好像落下了什么。。。



还有修改没有提交?,我们回顾下刚刚的操作:  第一次修改-> git add ->第二次修改-> git commit

在前面有讲到,Git管理的是修改,当你使用git add 命令后,工作区的第一次修改被放到了暂存区,准备提交,但是,我们后面又进行了第二次修改,这次的修改没有放到暂存区中,所以,git commit 只负责把暂存区的修改提交了,也就是第一次修改被提交了,但是,第二次的修改没有放到暂存区中,所以没有被提交。

提交后,使用 git diff HEAD -- readme.txt 命令查看工作区和版本库里面最新版本的区别:

怎么提交第二次的修改呢,继续使用 git add 然后再 git commit就可以。

小结:在Git中每次修改,如果不用git add到暂存区,那就不会加入到commit中()


撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作(git checkout -- file)。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,那就需要版本回退了,不过前提是没有推送到远程库。

撤销操作比较简单,操作的时候,查看git状态,里面会有对应的提示。。。


删除文件

在Git中,删除也是一个修改的操作,这里我们先添加一个test1.txt文件,并且提交到Git;

一般情况下,我们会直接在文件夹中将没用的文件删除,或者使用 rm 命令删除:

这个时候,Git是知道你删除了文件,因为工作区和版本库不一样了,使用git status可以查看被删除的是哪些文件;现在有两个选择:确定要从版本库中删除该文件,使用 git rm 删除,然后 git commit 提交你做的事情。

这样,文件就从版本库中删除了。就两步 git rm file --> git commit 

(小提示:先手动删除文件,然后使用git rm <file>和git add<file>效果是一样的。)

如果不小心删错了文件,版本库里还有这个文件,所以可以命令 git checkout -- file 很轻松地把误删的文件恢复到最新版本:

git checkout 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以还原

注意

1,如果你用rm删除的文件,就相当于只删除了工作区的文件,如果需要恢复,直接使用 git chekout -- file就可以:

2,如果你用的是git rm删除文件,那就相当于不仅删除了文件,而且还添加到了暂存区,需要先 git reset HEAD <file>,然后再git checkout -- <file>,如下图操作所示

猜你喜欢

转载自blog.csdn.net/rongDang/article/details/82853332
今日推荐