Git-版本回退

对readme.txt中的内容进行修改,内容如下: 
Git is a distributed version control system.
Git is free software distributed under the GPL.
然后尝试提交:
Git-版本回退_第1张图片
对readme.txt中的内容再次修改,内容如下:
Git is a distributed version control system.
Git is free software.
然后尝试提交修改:
Git-版本回退_第2张图片
像这样,不断的对文件中的内容进行修改,然后不断的提交修改到版本库里面,就好像我们在RPG游戏是一样的,每次通过一关就会自动把游戏状态存盘,如果某一关没有通过你还可以读取前一关的状态。有些时候在打boss失败的时候,就会手动把游戏状态存到距离boss最近的一关,还可以从距离boss最近的那关开始继续。Git也是这样,每当你觉得文件修改到一定程度的时候,就可以"保存一个快照",这个快照在Git中被称为commit,一旦你把文件修改乱了,或者说误删了文件,这时候就可以通过最近的commit恢复,然后继续工作,而不是说把几个月的工作成果全部丢失
回忆一下我们已经对readme.txt中的内容修改了三次,分别是:版本一: wrote a readme file 版本二:append GPL[C 版本三:add distributed
这是因为我们只是修改了一个文件三次,所以我们记得非常清楚,但是工作中我们可能需要修改上千个文件中上千行代码,这个可能就不太容易记得清楚了,在Git里面有一个命令可以帮助我们查看我们的修改历史记录:git log
Git-版本回退_第3张图片
大家可能也发现了一个现象,就是最上面显示的是最近提交修改的内容,对,git log命令显示从最近到最远的日志记录,如果你觉得输入的信息太多,可得眼花缭乱可以在git log 后面添加参数  --pretty=oneline
Git-版本回退_第4张图片
可以看到除了那些比较熟悉的修改内容的信息之外,我们也看到了那一串黄色的字符,其实这个就是commit id(我们所说的版本号)
还可以看到最近的一个版本里面有一个head标记,在Git里面head表示当前版本,上一个版本就是head^上上一个版本就是head^^,当然网上100个版本就是head~100,是不是超级人性化,真爱

我们现在就把当前的版本会退到append GPL[C 也就是第二个版本,这个时候我们可以使用git reset命令,如下:
git reset --hard HEAD^    
在这需要提出一个问题:我的平台是win10,输入上述命令的时候出现了错误,错误如下:
原因还不是太清楚 ,因为我使用的也是git bash 有大佬说因为使用shell把上档键^当做行转义了,可能还是因为平台的问题
不过可以改成如下命令:git reset --hard HEAD~1 :
这个时候就表示版本回退成功了,好了我们莱看一个一个比较神奇的事情,去看看readme.txt文件里面的内容:
Git-版本回退_第5张图片
再使用git log 查看当前版本库的状态:
Git-版本回退_第6张图片
ok回退成功,那么我们可以继续会退到上一个版本:wrote a readme file
执行 git reset --hard HEAD~2
Git-版本回退_第7张图片
很好,已经回退成功,但是我现在想回去了,怎么办?
在上面我们不是说过一个东西吗,那个一长串的黄色的字符,那个字符表示的是commit id  那岂不是就行了吗
git reset --hard (commit id)  在这里还有一点需要说的就是commit id是一长串很长的字符,我们不需要完全把整个粘贴过来,只需要前面的几个就行,但是只写一个也不行,一般就写前6位
现在我们回去 append GPL那个版本,执行如下命令:
Git-版本回退_第8张图片
但是--hard后面的commit id  是因为我们没有关闭这个shell  我们可以上面找到相关的commit id就行了,但是如果关闭了shell怎么办?去哪找,刚就说了 Git是超级人性化的,他又提供了一个命令用于让我们查看我们每一次的命令: git reflog
Git-版本回退_第9张图片
这样看到了每一次操作的记录,超级方便简洁


总结一个:
HEAD指向的就是当前的版本
git reset --hard commit_id  可以回退版本
git log 查看提交历史,方便确定我们会退到哪一个版本
git reflog 查看命令历史,方便我们回到未来的哪一个版本



你可能感兴趣的:(Git-版本回退)