Git使用教程-5.版本回退
2021-09-17 本文已影响0人
Justin小贾同学
历史记录
- 现在,我们继续修改
README.md
文件的内容,然后提交到仓库。
23696@DESKTOP-GKRBCVI MINGW64 ~/Desktop/MyProject (master)
$ cat README.md
Hello Git!
Git is free software.
Git is a distributed version control system.
提交到仓库
23696@DESKTOP-GKRBCVI MINGW64 ~/Desktop/MyProject (master)
$ git add README.md
23696@DESKTOP-GKRBCVI MINGW64 ~/Desktop/MyProject (master)
$ git commit -m "distributed"
[master cf53e60] distributed
1 file changed, 1 insertion(+)
这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。版本回退 - 廖雪峰的官方网站 (liaoxuefeng.com)
- 实际工作中我们会提交很多次,那么我们怎么看到这些历史记录呢?在Git中,我们用
git log
命令查看:
23696@DESKTOP-GKRBCVI MINGW64 ~/Desktop/MyProject (master)
$ git log
commit cf53e60a3104d7f187c54759b0238c83c2522d48 (HEAD -> master)
Author: siebe <siebe@qq.com>
Date: Thu Sep 16 11:32:12 2021 +0800
distributed
commit 8249b3d01d2385cb2b201f2d57260b84d65eafde
Author: siebe <siebe@qq.com>
Date: Thu Sep 16 11:30:36 2021 +0800
add tow files
commit 5754150a2f4e88a2309dda8c73f0a42ef192ad7d
Author: siebe <siebe@qq.com>
Date: Thu Sep 16 11:26:43 2021 +0800
free software
commit 42d49c9aad91151f62a0391b5c3896e8162fea11
Author: siebe <siebe@qq.com>
Date: Wed Sep 15 13:43:51 2021 +0800
add a readme file
我们看到的一大串cf53e60a...
就是commit id(版本号),每次提交都会产生一个版本号。
回滚快照
注:快照即提交(commit)的版本,每个版本我们称之为一个快照。
从前面的log中我们可以看到HEAD指向了最后一次commit,想要回滚就是把HEAD指向某个快照。首先,我们得知道要回到哪个一个快照的版本号。在Git中,用HEAD表示当前版本,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
现在,我们想要回到上一个版本,就使用git reset
命令
23696@DESKTOP-GKRBCVI MINGW64 ~/Desktop/MyProject (master)
$ git reset --hard HEAD^
HEAD is now at 8249b3d add tow files
3.png
Git不仅可以回到过去,而且还可以回到未来
。现在我们的HEAD指向了add tow files
版本,万一想要回到distributed
该怎么办呢?
23696@DESKTOP-GKRBCVI MINGW64 ~/Desktop/MyProject (master)
$ git reset --hard cf53e60
HEAD is now at cf53e60 distributed
2.png
这里就有一个问题,要是我们不知未来
版本的版本号怎么办呢?可以使用git reflog
命令,看到每次reset的记录。