Git - Git教程 04:版本回退

版本回退

1 - 现在我们一共有 3 个版本被提交到 Git 仓库里:0001G / 3 files added /  0002G 

2 - git log 是查看版本历史记录命令

 1 $ git log
 2 commit 4d050e484b381a069625ec974f5f407c9826ecd0 (HEAD -> master)
 3 Author: YourName <Your email>
 4 Date:   Wed Apr 12 00:40:34 2023 +0800
 5 
 6     0002G
 7 
 8 commit bdb46dea0a589e67699fb7b526ddebeaa3145849
 9 Author: bsepoch <bsepoch@163.com>
10 Date:   Wed Apr 12 00:28:51 2023 +0800
11 
12     3 files added
13 
14 commit 3e5794919a980678cebf1c6a3e5ce0f825e97016
15 Author: bsepoch <bsepoch@163.com>
16 Date:   Wed Apr 12 00:26:13 2023 +0800
17 
18     0001G

如果修改的历史版本过多,以上的显示效果难免会使人眼花缭乱,可使用以下命令

1 $ git log --pretty=oneline
2 4d050e484b381a069625ec974f5f407c9826ecd0 (HEAD -> master) 0002G
3 bdb46dea0a589e67699fb7b526ddebeaa3145849 3 files added
4 3e5794919a980678cebf1c6a3e5ce0f825e97016 0001G

Git 和 SVN 不一样,Git 的 commit id 不是1、2、3……递增的数字,而是一个 SHA1 计算出来的一个非常大的数字,用十六进制表示。为什么 commit id 需要用这么一大串数字表示呢?因为 Git 是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1、2、3……作为版本号,那肯定就冲突了

你每提交一个新版本,实际上 Git 就会把它们自动串成一条时间线。如果使用可视化工具查看 Git 历史,就可以更清楚地看到提交历史的时间线

3 - 回退到上一版本

$ git reset --hard HEAD^
HEAD is now at bdb46de 3 files added

 若要回退以前的版本,首先 Git 必须知道当前版本是哪个版本。在 Git 中用 HEAD 表示当前版本,上一个版本就是 HEAD^,那么上上一个版本就是 HEAD^^......当然往上100个版本写100 个^ 就比较蛋疼,所以可写成 HEAD~100

1 $ git reset --hard HEAD~1
2 HEAD is now at c374398 0001G

4 - 这里我们查看 file_D.txt 文本内容,已经变成了初始内容

1 $ cat file_D.txt
2 It's been a long day without you my friend

此时我们用 git log 看一下现在版本库状态会发现最新的那个版本 0002G 消失了

 1 $ git log
 2 commit bdb46dea0a589e67699fb7b526ddebeaa3145849 (HEAD -> master)
 3 Author: bsepoch <bsepoch@163.com>
 4 Date:   Wed Apr 12 00:28:51 2023 +0800
 5 
 6     3 files added
 7 
 8 commit 3e5794919a980678cebf1c6a3e5ce0f825e97016
 9 Author: bsepoch <bsepoch@163.com>
10 Date:   Wed Apr 12 00:26:13 2023 +0800
11 
12     0001G

5 - 指定回到未来的某个版本。要求:当前命令行窗口未关闭,依旧显示 0002G 的信息

$ git reset --hard 4d050
HEAD is now at 4d050e4 0002G

注:版本号没必要写全,前几位就可以了,Git 会自动去找。当然也不能只写前一两位,因为 Git 可能会找到多个版本号,就无法确定是哪一个了

查看 cat file_D.txt 文本内容

$ cat file_D.txt
It's been a long day without you my friend,And I'll tell you all about it when I see you again.

惊不惊喜,意不意外?Git 的版本回退速度非常快,因为 Git 在内部有个指向当前版本的 HEAD 指针,当你回退版本的时候,Git 仅仅是把 HEAD 重指向所回退的版本

6 - 当你回退到了某个版本,关掉了电脑,第二天早上就后悔了,又想恢复到新版本怎么办?找不到新版本的 commit id 怎么办?Git 提供了一个命令 git reflog 用来记录你的每一次命令
1 $ git reflog 
2 4d050e4 (HEAD -> master) HEAD@{0}: reset: moving to 4d050
3 bdb46de HEAD@{1}: reset: moving to HEAD^
4 4d050e4 (HEAD -> master) HEAD@{2}: commit: 0002G
5 bdb46de HEAD@{3}: commit: 3 files added
6 3e57949 HEAD@{4}: commit (initial): 0001G

 

posted on 2017-07-11 17:34  低头捡石頭  阅读(17)  评论(0编辑  收藏  举报

导航