Git实现版本回退功能
现在,我们重新修改下文件并添加和提交到版本库:
|
|
像这样,我们不断的对文件进行修改,并一次一次的提交到版本库。就像我们在玩游戏时,每过一关我们都会保存当前的状态,以防备哪次被打败了,我们就可以选择重新读取保存的状态,然后可以从最近的地方重新开始玩。Git也是一样的道理,每当你觉得文件修改到一定程度的时候,就可以保存一个快照,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
那么,我们人的脑子怎么可能记住一个有几千行的代码文件都修改过什么啊,所以Git自由其智能之处,我们可以使用git log来查看
|
|
如果嫌输出的信息太多,我们可以使用git log –pretty=oneline来查看啦
|
|
需要友情提示的是,你看到的一大串类似“ 45c00ae…6f78565”的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字(40位),用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
现在,我们开始回退到上一个版本,首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交“ 45c00ae…6f78565”(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
我们可以使用git reset回退到某个版本:
|
|
现在,就可以回到最新的版本了。注意:这里只需输入commit id的前几位就ok。
假如,我们已经关掉了窗口,又想到回到某个版本该怎么办呢?不用担心,Git是有后悔药给我们吃的啦。Git提供了一个命令git reflog用来记录你的每一次命令:
|
|
此时,我们可以根据前面的commit id返回到想要的版本库,仿佛穿梭于历史之间,很酷吧。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向“添加hello git”:
小结:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hard commit_id。
回退前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
- 原文作者:maratrix
- 原文链接:https://maratrix.cn/post/2014/06/21/git-version-reset/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。