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 <[email protected]> Date: Fri Mar 27 22:53:03 2015 +0800 add some information commit e182fa0a95c19feb5951e0a05fff0fd2260fb39b Author: yangnianbing <[email protected]> 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,好吧,我們又回來了。