本文所说的回滚,均是从版本库中找回之前的版本。文件未提交时的回滚比较简单,不包括在内。
一.单文件回滚
将某一文件回滚到某次提交
回滚方法
git checkout commitID fileName
看个例子
我们建立空文件a.txt将其提入版本库
在a.txt中增加一行文字,再将其提入版本库
此时a.txt的内容:
版本库中与a.txt相关的提交
现在我们来回滚文件到第一个版本
git checkout d5212be438720 a.txt
此时,工作区和暂区a.txt的内容已变回第一版本的空文件
撤销回滚
若要放弃这次回滚,则
git reset a.txt
git checkout a.txt
二. 版本整体回滚(多文件一起)
方法
git reset --hard commitID
例子
假设我们有三个提交版本
版本1:建立空文件a.txt b.txt
版本2:在a.txt中加一行文字“this is file a”
版本3:加入新的空文件c.txt
现在我们回滚到版本1
执行
git reset --hard d5212be438720a
看下效果
a.txt为空,c.txt消失了!
连提交记录也只剩下了最初版本的一条
撤销回滚
使用reset之后,回滚稍微复杂些
首先
git reflog
我们看到,回滚之前的版本位于aa23c50 HEAD@{1}
执行
git reset --hard master@{1}
注:master为当前分支名
再看效果
我们安全到家了!
如果你了解一些git的原理,看到这,一定会想。
git reset –hard master@{1}可以撤销回滚,是否可以直接用于回滚呢?答案是可以!不妨一试。