Git教程:Git版本操作之版本回退(一)

版本回退

在前面我们已经修改了 readme.txt 文件如下内容:

git is a version control tool
git is the most advaced version control system
i learn git now

这里我们再添加一行:

git is a version control tool
git is the most advaced version control system
i learn git now
i think git is better than SVN

然后提交至仓库:

$ git add readme.txt
$ git commit -m "Git better than SVN"

好,到现在,你还记得 readme 总共修改几次,提交了几次吗?

你可能会记得,总共三次是吧。但是如果一个文件我们需要修改几十次,上百次你还会记得吗?更别说记得每次具体修改哪里了。所以这就是Git发挥威力的时刻了,一个命令就告诉你readme 提交记录,以及每次的变化,命令:git log:

$ git log
codercxf@codercxf-virtual-machine:~/Desktop/firstRep$ git log
commit a7616face803479e0573ff35bc18d00439cf28ff (HEAD -> master)
Author: CoderCXF <18251716983@163.com>
Date:   Sun Dec 1 20:24:50 2019 +0800

    git better than SVN

commit 1ffeaf83cef2f3976dc3bb6fd1f17e2af2a4a94c
Author: CoderCXF <xxxxxxxxxxx@xxx.com>
Date:   Sun Dec 1 20:16:55 2019 +0800

    commit rwo files one time

commit 61de2ca94483b341f308338bf27f6628dc8d5757
Author: CoderCXF <18251716983@163.com>
Date:   Sun Dec 1 20:15:11 2019 +0800

    first commit

所以,同志们,看到什么奇迹发生了没!!!

可以看到总共有三次提交 :最近的一次是"git better than SVN" ,还有之前的两次"commit two files one time"以及"first commit"

git 已经详细的记录每次历史提交,包括commit号AuthorDate等等信息。


git log 只是一个花絮,别忘了主题:如何回退到之前的版本?

看到上面git log 命令返回的嘛,其中以一个是commit 号(版本号),就是 a7616face.. 很长的一点数字,每一次提交的commit号都不一样,很容易理解,就是为了区分每一次提交,数字很长才不会造成重复。

可以这样说,只要知道了版本号就很容易回退到之前的任何一个版本,问题解决,所以到底该怎样做呢?

假如我们现在并不认为Git要比SVN好(虽然是事实^ ^),也就是要回退到没有 "git is better than SVN"的版本,即 "commit two files one time "的版本

我们可以使用 git reset回退,前一个版本是 HEAD^ ,前前一个版本是 HEAD^^, 以此类推,但是要是前10个版本,难道要写10个上标?当然不会那么愚蠢,例如回退10个就可以使用 HEAD~10

现在回退到前一个版本:

$ git reset --hard HEAD^

此时来查看 readme.txt 文件内容是不是已经回退成功:

$ cat readme.txt  
git is a version control tool
git is the most advaced version control system
i learn git now

可以看到,果然 “git is better than SVN” 没有了,回退成功。我们也可以继续回退到前前一个版本,直接继续 git reset 即可。

但如果这时候,你还是觉得Git 比 SVN 好用,后悔之前的删除操作,还想要恢复到之前的版本,该怎么办?说分手了还能再说我爱你?是的,在Git的世界里是可以的:

可是我们使用 git log 查看的时候,已经没有了刚才删除的版本记录,该怎么办?

commit 1ffeaf83cef2f3976dc3bb6fd1f17e2af2a4a94c
Author: CoderCXF <[email protected]>
Date:   Sun Dec 1 20:16:55 2019 +0800

    commit rwo files one time
commit 61de2ca94483b341f308338bf27f6628dc8d5757
Author: CoderCXF <[email protected]>
Date:   Sun Dec 1 20:15:11 2019 +0800

    first commit

我们之前说只要知道commit号(一大串字符)就可以办到任何事,于是你就回去找刚才删除的那个版本号:找到了,就是a7616f...于是就可以回到刚才的版本:

git reset --hard a7616f

版本号不用写全,Git会自动识别,但是也不能写的太过简单,否则就会产生冲突。
然后查看 readme.txt 中的内容是否恢复到上一版本:

cat readme.txt
git is a version control tool
git is the most advaced version control system
i learn git now
i think git is better than SVN

看到已经恢复了上一版本。


在这里插入图片描述

小结:

记住:HEAD指向的是当前的版本

1)如果要回退到前一个版本使用 : git reset --hard HEAD^,返回前前一个版本使用的是:git reset --hard HEAD^^

(tips:之前的版本并未被删除!只是HEAD指针的指向变化)

2)使用git log 查看提交记录(包括版本号等信息);

3)总之使用 git reset --hard <commmit id> 就能回退到指定的版本。




参考:

【1】Git回滚到之前某一commit

【3】版本回退

【2】廖雪峰Git教程

发布了33 篇原创文章 · 获赞 23 · 访问量 2267

猜你喜欢

转载自blog.csdn.net/weixin_42119041/article/details/103346562