版本回退
在前面我们已经修改了 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号
、Author
、Date
等等信息。
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>
就能回退到指定的版本。
参考:
【3】版本回退
【2】廖雪峰Git教程