http://www.cooklife.cn/detail/551576bd9218037076133136#View
git是干嘛的?
版本管理工具是干嘛的?当然是管理同一个文件不同的版本的。那么版本是什么概念,对于一个文件,从新建到完成态,期间会经过很多个状态,有的时候我们希望保存这些中间状态,在需要的时候可以恢复到其中的某个状态,这个中间状态就是一个版本。
跟svn不同,svn中的版本号是一个自增长的数字,在git中的版本号是根据某些规则生成的不重复的长度为40的字符串,每次commit之后就会生成一个版本号来标识这次提交之后版本库的快照,之后可以根据这个版本号来恢复到当前的状态。
我们在README.txt文件中再次加入一些信息"add some information again"
git add README.txt git commit -m "add some information again" $ git log --pretty=oneline 7c19d353bdf0f077871d3021f5bd2b405f749061 add some information again 06e8b27ed48476f4a1cface043d1c2b5d4f3abd8 add some information e182fa0a95c19feb5951e0a05fff0fd2260fb39b '初始化提交'通过git log我们可以看到提交的历史,在git中用HEAD表示当前的版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,上上上个版本就是HEAD^^^,那么往前100个版本是....,这里就不写了,大家自己可以回去练习。
如果我们想做时光机回到回去怎么办?答案是使用git
git reset --hard HEAD^ git reset --hard versionNumversionNum是那四十字符长度的字符串,我们再看看,工作空间内的文件是否恢复到上一个版本了,我们再执行git log
$ git log commit 06e8b27ed48476f4a1cface043d1c2b5d4f3abd8 Author: yangnianbing <137602812@qq.com> Date: Fri Mar 27 22:53:03 2015 +0800 add some information commit e182fa0a95c19feb5951e0a05fff0fd2260fb39b Author: yangnianbing <137602812@qq.com> Date: Fri Mar 27 20:06:58 2015 +0800 '初始化提交'咦,我们回到了过去,但是发觉不好玩了,回头一看,返回未来的坐标肿么没了?这下可怎么办,难道就生活在这个拉屎只能用瓦片刮屁屁的时代么。当然是不会的,万能的git大神怎么可能没有考虑到这一点。
$ git reflog 06e8b27 HEAD@{0}: reset: moving to HEAD^ 7c19d35 HEAD@{1}: commit: add some information again 06e8b27 HEAD@{2}: commit: add some information e182fa0 HEAD@{3}: reset: moving to e182 488db63 HEAD@{4}: commit: ddssd e182fa0 HEAD@{5}: commit (initial): '初始化提交'look,返回未来的坐标又回来了git reset --hard 7c19d35,好吧,我们又回来了。