windows下git的安装、配置与操作(三)——版本回退

当你文件修改到一定程度的时候,我们可以保存一个恢复点。这个回复点在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

首先我们用git log命令查看文件修改的历史记录:

<span style="font-size:14px;">$ git log
commit 904d9957a23ee05fa995560f6f46b2038dda33e0
Author: Loach Zhang <ga_smile_nk@sina.com>
Date:   Fri Nov 14 12:19:39 2014 +0800

    added someting

commit d23df46cfba38f7eb4b0b4be222b85cbbd034962
Author: Loach Zhang <ga_smile_nk@sina.com>
Date:   Fri Nov 14 12:08:37 2014 +0800

    modified readme.txt

commit cf920973cbb47d2aa4a2f8fb4c298227b883d46a
Author: Loach Zhang <ga_smile_nk@sina.com>
Date:   Fri Nov 14 11:52:08 2014 +0800

    a new file</span>

我们可以看到一共进行了三次提交。一次增加和两次删除。

<span style="font-size:14px;">$ git log --pretty=oneline
904d9957a23ee05fa995560f6f46b2038dda33e0 added someting
d23df46cfba38f7eb4b0b4be222b85cbbd034962 modified readme.txt
cf920973cbb47d2aa4a2f8fb4c298227b883d46a a new file</span>
加上参数--pretty=oneline会将每一次的日志进行排版。

需要友情提示的是,你看到的一大串类似3628164...882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示。因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交

<span style="font-size:14px;">904d9957a23ee05fa995560f6f46b2038dda33e0</span>
,上一个版本就是 HEAD^,上上一个版本就是 HEAD^^,当然往上100个版本写100个 ^比较容易数不过来,所以写成 HEAD~100

现在,我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset命令:

$ git reset --hard HEAD^
HEAD is now at d23df46 modified readme.txt

看看readme.txt的内容是不是版本“add distributed”:

$ cat readme.txt
Hello World!
this is a git file.
this file will commit to git.

还可以继续回退到上一个版本,我们用git log再看看现在版本库的状态:

$ git log
commit d23df46cfba38f7eb4b0b4be222b85cbbd034962
Author: Loach Zhang <ga_smile_nk@sina.com>
Date:   Fri Nov 14 12:08:37 2014 +0800

    modified readme.txt

commit cf920973cbb47d2aa4a2f8fb4c298227b883d46a
Author: Loach Zhang <ga_smile_nk@sina.com>
Date:   Fri Nov 14 11:52:08 2014 +0800

    a new file

最新的那个版本已经看不到了!,只要上面的命令行窗口还没有被关掉,你就可以找到commit id

<span style="font-size:14px;">904d9957a23ee05fa995560f6f46b2038dda33e0</span>
,于是就可以指定回到未来的某个版本:

$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。这样我们的文件就回到之前的第三个版本。

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到某个版本时,再想恢复到前一个,就必须找到前一个版本的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog
904d995 HEAD@{0}: reset: moving to 904d9957
d23df46 HEAD@{1}: reset: moving to HEAD^
904d995 HEAD@{2}: commit: added someting
d23df46 HEAD@{3}: commit: modified readme.txt
cf92097 HEAD@{4}: commit (initial): a new file

然后可以在reset回去。



文章参考:版本回退



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值