由于时间精力有限,自本篇开始,本专栏后续的博文将会进行一定程度的精简,不会连篇累牍地介绍命令和基础知识,如有需要,请访问廖雪峰的git教程。
1.使用git进行版本回退
版本回退主要是针对于以下两种状态:
add
到本地仓库,还未commit
到仓库- 已经
commit
到远程仓库
1.1 未commit
到本地仓库
这个时候的版本回退也就是撤销修改,撤销修改之后文件内容会回到最近一次的commit
的位置。
当前的文件情况:
原本的hello.py
文件是空的,现在给其加入内容:
修改了hello.py
文件之后,使用git status
查看当前状态如下:
使用如下命令撤销修改:
git checkout -- hello.py
撤销之后再次打开hello.py
文件,文件内容被还原如下:
以上是没有add
到暂存区的,如果已经add
到暂存区了,
修改hello.py
如下并add
到暂存区:
使用git status
会提示如下内容:
这个时候如果想要把add
到暂存区的内容给撤销掉,方法与上一个类似,但是多了一个步骤,就是撤销暂存区的修改:
git restore --staged hello.py
git checkout -- hello.py
结果如下:
可以看到修改内容没有了。
1.2 已经commit
到本地仓库
首先使用命令git log
查看仓库版本的提交情况,返回结果如下:
可以看到只有一次提交,提交的初始信息为Initial commit
,创建几个空文件,然后进行第二次提交,使用如下命令:
touch main.c
touch hello.py
git add .
git commit -m "第二次提交,增加了main.c和hello.py文件"
返回结果如下:
接下来再使用git log
查看提交历史记录:
可以看到,本地仓库的提交历史记录中已经有了第二次提交。
使用ls
命令查看本地仓库的文件,如下所示:
红色框框框住的就是第二次创建的文件,如果我们要舍弃这一次的提交commit
,使用如下命令进行版本回退
git reset --hard HEAD^
执行之后查看本地仓库情况如下图所示,可以看到第二次提交的内容已经被撤销了,也就是版本回退了。
最后一个参数HEAD^
表示回退一个版本,如果要回退两个版本,可以使用HEAD^^
,以此类推,多个版本的时候使用HEAD~100
表示回退100个版本。
注意:版本回退是一个有风险的操作,最新的版本数据可能会丢失,所以,请谨慎操作。
如果已经进行了版本回退,但是发现还是新版本的好,这个时候可以尝试如下解决方案:
输入git reflog
,查找版本ID,然后进行版本切换
版本ID就是前面的那一串数字,输入时可以精简一些,一般输入前6位就行,使用如下命令进行回退:
git reset --hard 352f4bb
于是此时就回到了我们最开始的版本。
总结:
- 修改了工作区的内容,但是没有
add
到暂存区,使用git checkout -- XXX
进行撤销修改; - 修改了工作区的内容,已经
add
到了暂存区,首先使用git restore --staged XXX
将暂存区的内容撤销,然后使用git checkout -- XXX
将工作区的内容撤销; - 修改了工作区的内容,已经
add
到了暂存区,并且commit
到了版本库,此时只能进行版本回退,使用git reset --hard HEAD^
回退一个版本,以撤销本次修改。