[Git]版本退回

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 GPLcommit id1094adb,故可以进行后续的撤销版本退回操作。

撤销版本退回

  • 我们只需要再使用git reset指令,将hard指针指向最新的版本号所指向的对象即可,具体操作如下:
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

转载自:廖雪峰-Git教程
作者:廖雪峰