Git的使用教程(三)查看日志和版本回退
扫描二维码
随时随地手机看文章
我们使用任何的版本管理工具,原因无外乎就是想要记录文件新增、修改、删除等相关操作,当我们修改文件出现错误的时候,可以及时回到没有出错的“备份”文件。当然Git作为优秀的版本管理工具这样的功能当然不能少,下面我们就来看下与版本管理相关的一些命令吧。
命令:git log
git log可以记录我们git commit操作(不会记录git add操作,如果你没有进行过一次git commit,那么git log的时候什么都不会显示),每次git commit都会产生一条记录,每条记录代表一次commit,一条记录共有四部分组成。
commit:是一个由SHA1计算出来的非常大的数字,用十六进制表示,是此次操作的唯一标识符(每次commit的时候该值不会重复),我们可以通过它准确的找到此次提交操作,为恢复到该版本打下坚实的基础。
Author: 提交该版本的作者以及该作者的邮箱
在多人协作中,每个人都有可能对文件做出一些调整,如何区分是什么人做了这些调整呢,这就用到了Author。我们可以使用git config user.name和git config user.email来获取当前用户名和用户邮箱,如果没有设置或是需要调整,可以通过git config --global user.name "new name"来进行调整。设置Author很有必要,最好在git init之后就立刻设置,这样在你进行git commit的时候就能记录你设置的Author信息了。
Date:提交的日期。
最后:最后一行就是关于此次提交的说明,也就是我们git commit -m的内容了,这可以让我们更加清楚为什么做此次提交操作,为以后的版本恢复打下坚实基础。
直接使用git log,会展示每次提交的详细的信息,但是当commit信息过多,亦或者我们不想要这么详细的信息的时候,此时我们就可以使用git log的另一种用法。
[plain] view plain copygit log --pretty=oneline
变少了有某有,这样一屏下来就可以展示更多的commit信息了。 命令:git reset git log只是帮我们记录了每次的提交操作,我们想要进行不同的版本切换,还需要用到git reset命令。在此之前,我们先多进行几次提交操作。准备工作做好了,正式开始吧。
方法一:[plain] view plain copygit reset --hard HEAD^ git reset是版本回退命令,--hard是回退命令的一个参数,暂时不用深究它具体代表什么含义,只要记住这样操作可以达到我们回退的目的即可。前面的部分我们暂且把它当做是实现版本回退的一种固定格式,我们重点来说下HEAD^。在Git中,HEAD代表的是当前版本,拿上述例子来说就是"add four line",而加个^,就表示当前版本之前的版本,就是例子中“add third line”,每加一个^就表示更前的一个版本,例如HEAD^^就表示“add second line”这个版本,如果想要回到100个版本前,就需要100个^,当然回退的版本太靠前的话,光写^也是个麻烦事,还有,Git提供了另一种写法解决了这个问题。
方法二:
[plain] view plain copygit reset --hard HEAD~1 把HEAD^换成了HEAD~1,其中1代表回退几个版本,如果需要回退到10个之前的版本,只需要把HEAD~1改为HEAD~10即可,是不是比10个^方便了好多呢。看起来是方便了点,但是仍有不足,如果想要回退到某个版本的时候,岂不是还要查一下这个版本和当前版本之间的差。Git也考虑到了这个问题,因此提供了第三种方法供我们使用。
方法三: [plain] view plain copygit reset --hard 1e7fac4 还记得刚才git log中提到的commit吗,此时我们就是把HEAD换成了commit。正是由于commit字串的唯一性,我们才能快速准确的回退到我们需要的版本,而不需要查找当前版本和切换版本之间的差值。关于--hard后面的这个字串,相信不少朋友还有疑问,下面小编就一一解答。 疑问一:该字串从哪里来的? 每次git commit的时候Git都会生成这样一个字串方便做版本管理,可以通过git log来查看每个版本具体commit字串值。 疑问二:进行版本回退的时候如何填写该字串? 其实这个并没有硬性的规定,经过小编测试,这个字串至少是4位,也就是说我们至少需要取commit字串的前4位(4位以下会报错)。其实输入的这个字串是为了确保Git能够准确的找到对应的版本,如果版本中有前4位重复的,那么我们就需要多增加一位,确保Git不会找错了。那么多少位适合呢?如果使用Git时间久了,就会发现,很多操作使用到这个commit的时候都会把它缩略为前7位,因此,我们也可以沿用,使用前7位作为默认位数,当然,如果前7位仍不唯一,就需要输入前8位了。
命令:git reflog
一次又一次的回退操作已经使得我们忘乎所以,不知不觉已经快回退到最初的版本了,但这时候我们又怀念起了新版本的好,想要回去,可是git log中已经没有新版本的任何足迹了,我们还回的去吗?答案是肯定的,凡走过必留下痕迹,Git也同样为我们留下了蛛丝马迹。
git reflog是Git提供给我们记录命令历史,commit和reset都在被记录之列。通过git reflog,我们发现了最后一次提交的commit的字串,有了它我们是不是可以找回最新的版本呢?抱着怀疑的态度我们进行了尝试,再看下git log,哇塞,居然回到了进行回退前的状态,这样一来我们岂不是可以自由徜徉在各个版本之间了。