Git版本回退
介绍
该文档旨在解决文件恢复、恢复误提交、已提交。不管代码是已经提交到本地,还是提交远程仓库,都可以进行回退,并且不会留下git的提价记录。
git的分区
要想掌握git的版本回退,需要先了解git中的三大分区:
-
工作区(working directory)
项目代码存放的地方,一般都是项目的根目录。
-
暂存区(Stage)
一个临时保存修改文件的地方。
.git文件夹中的index文件就是暂存区,作为用来直接跟工作区的文件进行交互,工作区文件的提交或者回滚首选都是通过暂存区。 -
版本库(Local repository)
也称为本地仓库,在我们为项目添加本地库后,会在工作区生成一个
git的隐藏目录,git目录即为当前工作区的本地版本库。
git文件状态
git文件大致有如下的五种状态:
- 未修改(Origin)
- 已修改(Modified)
- 已暂存(Staged)
- 已提交(Committed)
- 已推送(Pushed)
各个状态之间的关系如下图:

git diff可以查看已经修改但未暂存的文件。(git diff后输入q可以退出)。git diff --cached可以查看已暂存,但未提交的文件。git diff {本地分支} {远程分支}可以查看已提交本地,但未推送到远程的分支。- 通过
git push命令将本地分支推送到远程分支。
回退命令
git rest命令
git reset就是进行回退的具体命令,配合具体的参数使用,可以达到不同的效果:
--soft、--mixed、--hard三个参数代表三个不同的回复等级:
--soft:仅仅将头指针(本地仓库)恢复,已经添加到暂存区以及工作区的代码不会发生改变。--mixed: 头指针(本地仓库)恢复,已经添加到暂存区的代码也会恢复,工作区的代码不会发生改变。--hard:一切都会恢复。头指针(本地仓库)恢复,已经添加到暂存区的代码也会恢复,工作区的代码也会恢复。
git log命令
git log用来查看git提交记录,但不能查看已经删除的记录。
git reflog命令
git reflog可以查看所有分支的所有操作记录(包括commit和reset的操作,包括已经被删除的commit记录)。
回退操作
下面的命令为具体的回退操作命令:
git reset --hard: 进行已修改或者暂存,但未提交文件的回退;git reset --hard origin/master: 进行已提交,但未推送的版本回退;- 1:
git reset --hard HEAD^,2:git push -f: 这两条命令是进行已提交且推送的回退;git reset --hard HEAD^: 本地仓库先回退到上一个版本;git push -f: 进行强制推送,覆盖远程分支;
上面的
--hard可以替换成其它的恢复等级,一般用--soft,这样一些修改的内容不会丢失。
各版本回退举例
git reset --hard head #当前版本
git reset --hard HEAD^ #回退到上一个版本
git reset --hard HEAD^^ #回退到上上一个版本
git reset --hard HEAD~3 #回退到往上3个版本
git reset --hard HEAD~10 #回退到往上10个版本
还可以用git log或者git reflog 查看版本的记录,用版本号来恢复到指定的版本。
如git reset --hard 710ae83 其中710ae83是版本号;
回退后,可以再用log和relog查看下版本的记录,对比下他们的区别。
git远程覆盖本地
我们也可以直接用远程仓库的代码直接覆盖本地的仓库:
git fetch —all
git reset —hard orgin/master #(master可以修改成其它要覆盖的分支)
git pull
git fetch :只下载远程库的内容,不做任务的合并。
git reset :把HEAD指向刚刚下载的最新版本。

浙公网安备 33010602011771号