從http://blog.csdn.net/xiahouzuoxin/article/details/9398629中我們已經能基本地使用git及github了,版本控制器的真正實用的地方將在本節中展現。
請注意:本節的內容與Github無關,請不要將git與github混為一談!
1. 版本回退——時光穿梭(參考[1])
我們常常在開發時會遇到這種情況:當對當前的版本不滿意,打算從上一個或上幾個版本重新開始時,該怎麼才能從git中擷取上一個版本呢?
不妨先用
git log
命令查看提交版本的日誌記錄吧。
我已經提交了2個版本,commit一行後的代碼是版本的唯一標識,我們可以通過它到任何一個我們想要的版本。注意:最新的一個版本是目前的版本,上一個版本是指第2個對應的版本。
這時,我們用
git reset --hard b36e5
回到上一個版本(可以不用輸入整個一大串,git會自動尋找,只要能唯一識別版本就行)
這個時候再git log看一下吧,
只剩下最初提交的一個版本了!上一個版本已經看不到了,而這時我們又後悔了,想回到回退前的版本,怎麼辦?
還是一樣的方法,前提是只要你還記得版本的ID,只要執行
git reset --hard ab21e
現在再看看,是不是,回去了!這樣就免去在開發過程中為備份不同的版本粘貼複製的麻煩了。
我關機了,第二天才後悔,不記得ID了怎麼辦,git log之後不是已經沒有最新版本的ID了嗎?
其實還是有辦法的,使用
git reflog
看看就知道了,git reflog記錄了git的每一次版本更新的命令。
版本回退更方便:git中使用HEAD表示目前的版本,HEAD^表示上一個版本,上上一個版本是HEAD^^,回退到上一個版本只需要執行
git reset --hard HEAD^
上上個版本當然是
git reset --hard HEAD^^
2. 版本提交前的回退
有木有,當你使用完git add之後立馬就後悔了,發現add檔案太少或太多了。
我們不妨先來理解git add和git commit命令的含義(看):
git分為工作區和版本庫,我們現在正在編輯的代碼就是工作區,版本庫裡包括了已經使用git commit命令提交的版本,還包括了一個緩衝區(Stage)。git add操作就是將修改的代碼添加到緩衝區的過程,git commit就是將緩衝區中更新的部分提交到master正式版本的過程。
我們的第1小節“版本回退——時光穿梭”就是想辦法如何從git commit執行後回退的過程。而本小節將給出的一個命令則是從git add回退的過程。好吧,請記住,
git reset HEAD <file>
下面是一個例子,我將README.md修改add後,再使用git reset HEAD README.md回退的過程。
最後,請記住1個協助命令,
git help
非常非常有用,隨時查命令。
另附一張常用命令圖(非我製作),
參考文獻:
[1] 廖雪峰Git教程:http://www.liaoxuefeng.com