Git - 版本穿梭(时光穿梭机)

前言

当你玩游戏时,每玩一段时间都会存一下档以免前面的进度丢失,在打厉害 BOOS 前,你也会选择存档,以免打不过而丢失进度,这个存档被称为 “快照”。

Git 允许你 commit 后的仓库自由前进后退版本,当你从 0 到 1 完成一个项目时,其中难免会出现修改多次,还有可能会出现文件误删丢失等问题,只要你正确的存档,那么 Git 就能让你有后悔药吃,不至于以前的代码全部白写。

查看历史

如果你想进行版本回退或前进,首先你需要知道如何查看历史,键入 git log 命令可列出:

$ git log

我一共 commit 提交了两次版本,如下:

commit d5cbf24b3712f1524555b9b71f2937e7d62bbfc8
Author: 王佳斌 <[email protected]>
Date:   Tue Jan 28 17:12:45 2020 +0800

    This is a demo!

commit f39fca8aebabdc353ac82d21feb9758e6953ffcd
Author: 王佳斌 <[email protected]>
Date:   Tue Jan 28 12:31:33 2020 +0800

    This is a test.

第一行 commit 后面一串代码是 哈希值(Hash Function) ,它是每个版本的唯一索引。
第二行 Author 是提交的用户名及邮箱。
第三行 Date 是提交的时间及日期。

This is a demo!commit 提交时的版本介绍信息。


当然,你也可以使用 git log --pretty=oneline 以更简洁的排版来打印历史:

$ git log --pretty=oneline

结果如下:

d5cbf24b3712f1524555b9b71f2937e7d62bbfc8 This is a demo!
f39fca8aebabdc353ac82d21feb9758e6953ffcd This is a test.

可以看到,省去了作者及时间,只留下了哈希值与版本介绍。


有时候为了视觉安全起见,可使用 git log --oneline 显示不完整的哈希值来打印历史:

$ git log --oneline

结果如下:

d5cbf24 This is a demo!
f39fca8 This is a test.

可以看到,显示了不完整的哈希值。

准备工作

在正题之前,我们还需要做一些准备工作,模拟几个提交版本

注意:如果你本地有提交历史,那么你可以不做下面的准备工作。

一、工作区新建一个 project.txt ,该文件中写入 one 字符,添加暂缓区后提交:

$ touch project.txt
$ vim project.txt
$ git add project.txt
$ git commit -m "one"

二、修改 project.txt ,该文件中删除 one 字符并写入 two 字符,添加暂缓区后提交:

$ vim project.txt
$ git add project.txt
$ git commit -m "two"

三、修改 project.txt ,该文件中删除 two 字符并写入 three 字符,添加暂缓区后提交:

$ vim project.txt
$ git add project.txt
$ git commit -m "three"

我们总结一下,我们的项目文件 project.txt 已经有了 3 个版本,每个版本都已经标识。

版本回退

目前,我们处在 three 第 3 个版本。假设我已经后悔了,现在要回到最初的 one 第 1 个版本。用一句简单明了的话阐述版本穿梭。根据版本索引值,移动 HEAD 指针来达到版本穿梭。

一、打印历史日志:

$ git log --pretty=oneline

我们 3 次提交的历史,都被 Git 管理并列出,:

878aab479d97cd8c2bbb4366dc2c5d65c3c639d7 three
2c3da06a3e3bc8f8ed2768398188d24c3efe848d two
94de44d2e1a9f7d6a9a9f237d553c29983be1f67 one

二、恢复 one 版本前,我们先看一下当前文件中有什么:

$ cat project.txt

结果:

three

假想一下,如果版本回退到了 one ,那么内容是不是变成了 one 呢?

三、根据哈希值索引,移动 HEAD 指针回退:

$ git reset --hard 94de44d2e1a9f7d6a9a9f237d553c29983be1f67

Git 提示,指针(HEAD) 现在在 one,也就是成功了:

HEAD is now at 94de44d one

四、测试,查看当前 project.txt 文件中有什么:

$ cat project.txt
# one

这样,我们就完成了一次版本的回退,你可以自由在各版本中随意穿梭。

写在后面

版本穿梭命令还有其他常用参数,如果你想了解更多版本穿梭知识请访问 Git - 版本穿梭 reset 命令常用三个参数及实际应用场景(–hard / --soft / --mixed)


本文只介绍了 如何进行版本穿梭,并未涉及 Git 版本穿梭的核心概念,如果你想了解 Git 版本穿梭的核心概念 HEAD指针 的话,请移步 HEAD 是什么?

发布了256 篇原创文章 · 获赞 403 · 访问量 80万+

猜你喜欢

转载自blog.csdn.net/weixin_44198965/article/details/104101971