7 版本回退

每当将文件修改到一定程度时,都可以使用之前的两条命令保存一个快照:

$ git add [Filename]
$ git commit -m "comment"

这个“快照”在 Git 中被称为 commit。
一旦文件不小心被该乱了,或者误删了文件,还可以从最近的一个 commit 恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

查看历史提交版本

之前提交到版本库中的几个不同的 new 1.txt 如下:

  • 版本1:First TXT file
Git is a version control system.
Git is free software.
  • 版本2:Second TXT file
Git is a distributed version control system.
Git is free software.
  • 版本3:Third TXT file
Git is a distributed version control system.
Git is free software distributed under the GPL.

在 Git 中,使用 git log 命令查看历史记录

$ git log
commit d709614a54f72c3561ecd129439e28acd5f2b00f (HEAD -> master)
Author: Cg <********@example.com>
Date:   Sun Dec 22 15:01:25 2019 +0800

    Third TXT file

commit ce29c7e8846eefe03a48881b1a065103d3a01aed
Author: Cg <********@example.com>
Date:   Sun Dec 22 00:23:15 2019 +0800

    Second TXT file

commit 3e23e9fe3d1fdf6e193095889f5d4311ab6baa06
Author: Cg <********@example.com>
Date:   Sun Dec 22 00:00:03 2019 +0800

    First TXT file

git log 命令显示从最近到最远的提交日志,可以从中看到三次的提交记录,如果觉得输出信息太多,可以加上参数:–pretty=oneline。

$ git log --pretty=oneline
d709614a54f72c3561ecd129439e28acd5f2b00f (HEAD -> master) Third TXT file
ce29c7e8846eefe03a48881b1a065103d3a01aed Second TXT file
3e23e9fe3d1fdf6e193095889f5d4311ab6baa06 First TXT file

每条版本信息前面显示的一大串十六进制的编码是 commit id (版本号),和 SVN 不同,Git 的 commit id 不是 1,2,3……递增的数字,而是一个用 SHA1 计算出来的数字,这是因为 Git 是分布式的版本控制系统,会有多人共同在版本库中工作,如果使用 1,2,3……作为版本号会冲突。

回退版本

回到过去

现在从 “Third TXT file” 回退到 “Second TXT file”

  • 首先,Git 必须知道当前版本是哪个版本。在 Git 中,用 HEAD 表示当前版本,也就是最新提交的 d709614…,上一个版本就是 HEAD^,上上一个版本就是 HEAD^^,如果是往上 100 个版本就写成 HEAD~100。
    将当前版本回退到上一个版本使用 git reset 命令:
$ git reset --hard HEAD^
HEAD is now at ce29c7e Second TXT file

查看 new 1.txt 的内容

$ cat new\ 1.txt
Git is a distributed version control system.
Git is free software.

还原成功!

返回未来

查看当前版本库状态

$ git log --pretty=oneline
ce29c7e8846eefe03a48881b1a065103d3a01aed (HEAD -> master) Second TXT file
3e23e9fe3d1fdf6e193095889f5d4311ab6baa06 First TXT file

最新的版本 “Third TXT file” 不见了,如果想重新回到这个 “Third TXT file” 这个版本怎么办?
只需要找到这个版本的 commit id,就可以回到未来的某个指定版本了。

$ git reset --hard d709614
HEAD is now at d709614 Third TXT file

返回成功,查看内容:

$ cat new\ 1.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.

在回退时,版本号不需要写完整,写前几位就行,Git 会自己去找,但是也不要只写前一两位,可能多个版本的 commit id 的前两位是相同的。

Git 的版本回退速度非常快,因为 Git 在内部有个指向当前版本的 HEAD 指针,当回退版本时,Git 仅仅是把 HEAD 从指向 “Third TXT file” 改为指向 “Second TXT file”,然后顺便把工作区的文件更新了。

当然,如果在 “回到未来” 的过程中忘记了版本号怎么办,即从 “Second TXT file” 回到 “Third TXT file” 但是忘记了 “Third TXT file” 的 commit id 该怎么办。Git 提供了一个命令 git reflog 来记录每一次的命令

$ git reflog
ce29c7e (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1
d709614 HEAD@{1}: reset: moving to d709614
ce29c7e (HEAD -> master) HEAD@{2}: reset: moving to HEAD^
d709614 HEAD@{3}: commit: Third TXT file
ce29c7e (HEAD -> master) HEAD@{4}: commit: Second TXT file
3e23e9f HEAD@{5}: commit (initial): First TXT file

从中可以看到 “Third TXT file” 的 commit id 是 “d709614”,这时在使用 git reset 来 “返回未来”

$ git reset --hard d709614
HEAD is now at d709614 Third TXT file
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值