Git的使用教程(三)查看日志和版本回退
我們使用任何的版本管理工具,原因無外乎就是想要記錄文件新增、修改、刪除等相關操作,當我們修改文件出現(xiàn)錯誤的時候,可以及時回到沒有出錯的“備份”文件。當然Git作為優(yōu)秀的版本管理工具這樣的功能當然不能少,下面我們就來看下與版本管理相關的一些命令吧。
? ??命令:git log
? ? git log可以記錄我們git commit操作(不會記錄git add操作,如果你沒有進行過一次git commit,那么git log的時候什么都不會顯示),每次git commit都會產生一條記錄,每條記錄代表一次commit,一條記錄共有四部分組成。
? ??
? ??commit:是一個由SHA1計算出來的非常大的數(shù)字,用十六進制表示,是此次操作的唯一標識符(每次commit的時候該值不會重復),我們可以通過它準確的找到此次提交操作,為恢復到該版本打下堅實的基礎。
? ??Author: 提交該版本的作者以及該作者的郵箱
? ? 在多人協(xié)作中,每個人都有可能對文件做出一些調整,如何區(qū)分是什么人做了這些調整呢,這就用到了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是回退命令的一個參數(shù),暫時不用深究它具體代表什么含義,只要記住這樣操作可以達到我們回退的目的即可。前面的部分我們暫且把它當做是實現(xiàn)版本回退的一種固定格式,我們重點來說下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字串值。? ??疑問二:進行版本回退的時候如何填寫該字串?? ? 其實這個并沒有硬性的規(guī)定,經過小編測試,這個字串至少是4位,也就是說我們至少需要取commit字串的前4位(4位以下會報錯)。其實輸入的這個字串是為了確保Git能夠準確的找到對應的版本,如果版本中有前4位重復的,那么我們就需要多增加一位,確保Git不會找錯了。那么多少位適合呢?如果使用Git時間久了,就會發(fā)現(xiàn),很多操作使用到這個commit的時候都會把它縮略為前7位,因此,我們也可以沿用,使用前7位作為默認位數(shù),當然,如果前7位仍不唯一,就需要輸入前8位了。
? ??命令:git reflog
? ? 一次又一次的回退操作已經使得我們忘乎所以,不知不覺已經快回退到最初的版本了,但這時候我們又懷念起了新版本的好,想要回去,可是git log中已經沒有新版本的任何足跡了,我們還回的去嗎?答案是肯定的,凡走過必留下痕跡,Git也同樣為我們留下了蛛絲馬跡。
git reflog是Git提供給我們記錄命令歷史,commit和reset都在被記錄之列。通過git reflog,我們發(fā)現(xiàn)了最后一次提交的commit的字串,有了它我們是不是可以找回最新的版本呢?抱著懷疑的態(tài)度我們進行了嘗試,再看下git log,哇塞,居然回到了進行回退前的狀態(tài),這樣一來我們豈不是可以自由徜徉在各個版本之間了。





