Git版本退回
版本退回
版本退回原理
- 在Git内部,有一个指向当前版本的
HEAD
指针,当在进行回退版本的时候,其实Git仅仅是把HEAD
指针指向的位置从最新的文件所在位置指向了想要退回的旧文件所在位置。
┌────┐
│HEAD│
└────┘
│
└──> ○ append GPL
│
└───○ add distributed
│
└───○ wrote a readme file
查看版本快照
- 在之前的操作中,我们不断的对文件镜像修改,然后不断提交修改到版本库里。故在进行版本退回之前,我们首先需要确认下在目前的版本库中,留有几个版本的文件快照。
- 使用
git log
命令,即可查看版本库中的文件快照情况,具体如下:
$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <[email protected]>
Date: Fri May 18 21:06:15 2018 +0800
append GPL
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <[email protected]>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <[email protected]>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file
- 如果嫌输出信息太多,看得眼花缭乱,可以试着加上
--pretty=oneline
参数:
$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
- 其中,所显示的一大串类似
1094adb...
的是commit id
(版本号)。
版本退回
- 在知道了当前版本和想要退回的版本后,即可进行版本退回操作。
- 现在,我们要把当前版本
append GPL
回退到上一个版本add distributed
,就可以使用git reset
命令:
$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
查看操作日志
- 如果发现版本退回错了,想要撤销版本退回,这该怎么办呢?那我们就需要知道最新版本的版本号
- 但我们输入
git log
查看当前文件快照时,会发现已经找不到最新的文件快照了。
$ git log
commit e475afc93c209a690c39c13a46716e8fa000c366 (HEAD -> master)
Author: Michael Liao <[email protected]>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <[email protected]>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file
- 所以此时,我们只能通过查找操作日志,去查看最新的版本号
- Git提供了一个命令git reflog用来记录你的每一次命令:
$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file
- 从输出可知,
append GPL
的commit id
是1094adb
,故可以进行后续的撤销版本退回操作。
撤销版本退回
- 我们只需要再使用
git reset
指令,将hard
指针指向最新的版本号所指向的对象即可,具体操作如下:
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
转载自:廖雪峰-Git教程
作者:廖雪峰