当我沉迷于Git学习之时,我突然发现一个问题。就是当我往后看教程的时候 我突然发现。后面的内容有很长一部分都是change的内容。这样的话change的这个分类内容就很不友好了。因为修改的这一部分我已经整体看过一遍了。所以这一张博客我打算一次性记录完剩下的change的内容。
上回我记录到了我修改我所创建的版本库里面的部分内容。让后记录了几个简单的操作方法,可以查看当前版本库里面的内容以及上传内容的区别之类的我们都可以清晰的看出来。接下来我们所研究的就是我们使用Git这个软件的目的。廖老师形象的称其为‘’时光穿梭器‘’。我们使用这个软件的初衷就是为了能够在我们处理一些代码量很大的程序时能够保存我们每一次的代码,同时能够让我们看到每一次修改的不同。这样当我们发现以前或者更早以前程序出现bug之类的东西的时候,亦或是我们当前处理的内容不符合我门的想法时我们能够较快的找回我们当初修改的节点,方便我们的修改。简而言之,Git可以帮我们保存我们每次对于一段代码的修改,这些一个个的节点我们可以随时回到过去亦或是回到当前。减少我们的出错率以及减少我们的工作量。
版本回退就是我们所说的回到过去。当我们对版本库里的一个文件进行多次修改后并且反复提交后,注意 一定是提交过后的文件。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit
。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit
恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
当然,作为一个程序猿我们虽然经常编写代码,但是我们也很难记住几千行的代码。不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log
命令查看。
我们可以很清晰的看到我们每次对于文件的修改。
git log
命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:
这样我们就能看清我们都做了一些什么 还有旁边的备注也很清晰。
前面的一串数字加字母是我们的版本号 我们不需要记住 但是当我们需要来回跃迁的时候我们就非常需要这些东西了。为什么commit id
需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,代码的编号就显得更加的尤为重要了。
然后我们就要开始跃迁了,我们的第一个目标就是跃迁到我们的的second文件中。
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交60a3c7c1372dxxxxxxx
,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
现在,我们要把当前版本“thirdly”回退到上一个版本“second”,就可以使用git reset
命令:
当然可能我的和你们的不太一样,这个我们后面细讲但是我们可以明显的看到的就是我们成功的跃迁到了上一个版本、
当然,能够跃迁一个 也就可以跃迁两个,三个,四个。。。。等等等只要有效的记录存在我们就可以一直跃迁。
报告舰长!我们跃迁到大爆炸之前了!
淦!
怎么办呢?如果光能够回去就不能说这个软件足够强大了
办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个third
的commit id
是xxxx
,于是就可以指定回到未来的某个版本:
$ git reset --hard xxxxx
HEAD is now at xxxxx third
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
舰长舰长 我们回来了!
OK GG!
当然,也会有这样的情况发生。
舰长舰长!我们刚刚跃迁的时候,你媳妇跟别人跑了!
淦!啥时候#=#
去年的时候!
淦!
过了一晚上 你的电脑肯定没有当初的信息了这个时候怎么办呢?
我们可以使用 git reflog指令来查看过往的记录从而提取到当初的commit id,这个世界还是有后悔药吃的2333