主页
文章
分类
标签
关于
Git的版本回退
Git入门
发布于: 2025-3-11   更新于: 2025-3-11   收录于: Git
文章字数: 1402   阅读时间: 3 分钟   阅读量:

版本回退

当我们学会了Git的基本提交操作,现在来试试Git的版本回退。

首先在一个空的仓库里,新建一个test.txt文件来作为测试文件,我们在里面添加如下内容:

1
this is the first commit

然后将其进行提交

1
2
3
4
git add test.txt
git commmit -m "test: add test.txt"
# [master 4070f9e] test: add test.txt
#  1 file changed, 1 insertion(+)

提交成功这就是我们的第一个版本 现在我们在来对它进行修改

1
this is the second commit

并同样进行提交

1
2
3
4
git add test.txt
git commmit -m "test: change test.txt"
# [master c5c4206] test: change test.txt
#  1 file changed, 1 insertion(+), 1 deletion(-)

现在我们的仓库里应该是存在两个版本的,但是我们应该不可能直接记住每一次提交的内容,所以我们可以使用git log来查看每次提交的日志

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
git log
# jy@DESKTOP-CLAMT1D:~/Git_test$ git log
# commit c5c4206709eb70bb1bf5c2b4cf6b45bd498821ea (HEAD -> master)
# Author: MJYEE <mjyeecloud@outlook.com>
# Date:   Tue Mar 11 13:30:52 2025 +0800

#     test: change test.txt

# commit 4070f9e39c22b7f183506c2f6677c6c90428b02f
# Author: MJYEE <mjyeecloud@outlook.com>
# Date:   Tue Mar 11 13:28:26 2025 +0800

#     test: add test.txt

在这里我们可以清楚的看到每一次提交的机基本信息,包括提交版本号、作者、日期以及commit信息。(如果commit内容很多,按j和k来上下移动,退出的话按q即可)

当我们做好准备的时候我们就可以开始版本回退了。版本回退最重要的两个信息是版本号和当前HEAD,从上面的日志我们可以看到每次提交的版本号,以及HEAD(当前版本)。HEAD是当前的版本,Git中规定HEAD^为当前版本的上一个版本,HEAD^^为上上个版本,以此类推。

我们现在正处于最后一次提交的版本上,让我们来回退到前一次提交的版本

1
2
git reset --hard HEAD^
# HEAD is now at 4070f9e test: add test.txt

git reset后的参数--hard代表的是回退到上个版本的已提交状态,除此之外还--soft上个版本的未提交状态,--mixed会回退到上个版本已经add但是没有提交的状态。

当执行完毕后,我们在打开test.txt就会发现里面的内容变成了我们第一次提交时候的状态。 现在让我们再来看一下git log的内容:

1
2
3
4
5
6
7
git log
# jy@DESKTOP-CLAMT1D:~/Git_test$ git log
# commit 4070f9e39c22b7f183506c2f6677c6c90428b02f (HEAD -> master)
# Author: MJYEE <mjyeecloud@outlook.com>
# Date:   Tue Mar 11 13:28:26 2025 +0800

#     test: add test.txt

我们可以看到,第二次提交的信息直接没了,只剩下第一次提交的信息。

但是,如果说我回退错了版本或者说我现在后悔了,我想回退到新的版本,该怎么做呢?很简单,把前面的HEAD^换成我们第二次提交的版本号即可,因为我们之前输入过git log,我们可以得知第二次提交的版本号为c5c4206...(版本号可以简写,但不能太短,而且每个人的版本号都不一样),现在让我们回退到第二次提交:

1
2
git reset --hard c5c4206
# HEAD is now at c5c4206 test: change test.txt

现在我们再来打开test.txt文件,我们就能发现它回到了我们第二次提交的状态。

哎!且慢,有小伙伴要说了,万一我之前没有git log过,我不知道我的版本号是多少该怎么办?很简单,我们通过git reflog来查看我们之前所做的每一次Git操作即可:

1
2
3
4
5
git reflog
# c5c4206 (HEAD -> master) HEAD@{0}: reset: moving to c5c4206
# 4070f9e HEAD@{1}: reset: moving to HEAD^
# c5c4206 (HEAD -> master) HEAD@{2}: commit: test: change test.txt
# 4070f9e HEAD@{3}: commit: test: add test.tx

我们可以看它输出了我们每次Git命令的操作内容,其中最前面的那串复杂字符串就是我们那次操作后的版本号,比如我在回退到HEAD^之后,我的版本号变成了4070f9e,而这条操作的前一个操作就是我第二次提交的版本号c5c4206,我们可以根据这个来进行版本的回退。

小结

  • HEAD表示当前版本号,HEAD^表示上一个版本号,使用git reset --hard HEAD^可以回退到上一个版本的已提交状态。
  • git log可以查看当前版本下的历史提交记录以及历史版本号,方便我们回退历史版本。
  • git reflog可以查看当前Git仓库下的历史Git操作,可以找到,每条操作后的版本号,方便回到未来版本。