Git学习之回退撤销
Git学习之回退撤销操作
Git是一个版本控制工具,所以灵活的回退或者撤销操作是必不可少的, 这里你将学到几个将操作撤销,或者将文件回滚的操作。但是注意,有一些操作时时不能撤销。下面我们先认识下总体的操作示意图:
由上图我们可以知道,总体的操作汇总:
-
git add
命令用于把工作目录的文件放入暂存区域 -
git commit
命令用于把暂存区域的文件提交到 Git 仓库 -
git reset
命令用于把 Git 仓库的文件还原到暂存区域 -
git checkout
命令用于把暂存区域的文件还原到工作目录
这里我们学习的重点时reset
和checkout
命令
1.首先是reset
命令
reset
命令有三个选项,语法:git reset <选项> HEAD/快照ID<~>
,其中<快照ID/HEAD>
默认是HEAD,~
表示回退的版本数,也可以表达~N
,
--soft
-
--mixd
默认,不加选项就是mixd
-
--hard
手册里是这样描述的:
- 如果你是使用
--soft
选项,仅仅是改变HEAD指针的指向,实际上是撤销上一次commit
,暂存区和工作区都没有改变
- 如果你是使用默认选项,那么HEAD指针会指向上一个快照,然后将这个上个快照复制到暂存区,暂存区的内容会被覆盖,工作区不会改变。
- 如果你使用–hard选项,那么这个操作会改变HEAD指针指向上一个快照,同时将上一个快照的内容复制到暂存区和工作区,暂存区和工作区原先的内容会被覆盖,这带有一点的危险性,因为覆盖的工作区文件不可撤销。
初次之外reset
还有以下功能:
- 回滚到指定的快照 只需要将HEAD换成你想回退的快照ID,语法:
git reset 指定的快照ID
- 回滚某个文件,这个操作并不会改变HEAD的指向,因为你只是回滚快照的一部分内容,语法:
git reset 快照 文件名/路径
- 还可以向前滚,直选将快照换成你想滚到的快照,语法:
git reset 快照
如果操作失误,错误的使用git reset --hard
回滚,使得工作目录改变了,可以使用git reflog
,看到相应的快照,可以回滚回去。
2. 其次是checkout
命令
这个命令有两个功能:一个是撤消对文件的修改;一个是切换分支,分支后面会说到,这里我们先了解它的撤消对文件的修改。
它实际上将暂存区的文件内容覆盖到工作目录下
我们用diff
命令查看下差别:
我们用checkout
从暂存区回滚到工作区:
可以看到已经回退到暂存区保存的状态