2017-03-10Git版本回退
1再次修改內容:Git is?a distributed version control system.
???????Git is?free software distributed under the GPL.
2提交:$ git add readme.txt$ git commit -m "append GPL"
[master 3628164] append GPL
?1?file changed, 1?insertion(+), 1?deletion(-)
不斷修改然后不斷提交修改到版本庫中,現在版本庫中存在三個版本:
版本1:wrote a readme file
Git is?a version control system.
Git is?free software.
版本2:add distributed
Git is?a distributed version control system.
Git is?free software.
版本3:append GPL
Git is?a distributed version control system.
Git is?free software distributed under the GPL.
如果想查看對過往文件過了哪些內容的修改 我們用git log命令查看過往記錄
$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: ??Tue Aug 20 15:11:49 2013 +0800
?
????append GPL
?
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: ??Tue Aug 20 14:53:12 2013 +0800
?
????add distributed
?
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: ??Mon Aug 19 17:51:55 2013 +0800
?
????wrote a readme file
版本回退
閱讀: 919855
?
現在,你已經學會了修改文件,然后把修改提交到Git版本庫,現在,再練習一次,修改readme.txt文件如下:
Git is?a distributed version control system.
Git is?free software distributed under the GPL.
然后嘗試提交:
$ git add readme.txt$ git commit -m "append GPL"
[master 3628164] append GPL
?1?file changed, 1?insertion(+), 1?deletion(-)
像這樣,你不斷對文件進行修改,然后不斷提交修改到版本庫里,就好比玩RPG游戲時,每通過一關就會自動把游戲狀態存盤,如果某一關沒過去,你還可以選擇讀取前一關的狀態。有些時候,在打Boss之前,你會手動存盤,以便萬一打Boss失敗了,可以從最近的地方重新開始。Git也是一樣,每當你覺得文件修改到一定程度的時候,就可以“保存一個快照”,這個快照在Git中被稱為commit。一旦你把文件改亂了,或者誤刪了文件,還可以從最近的一個commit恢復,然后繼續工作,而不是把幾個月的工作成果全部丟失。
現在,我們回顧一下readme.txt文件一共有幾個版本被提交到Git倉庫里了:
版本1:wrote a readme file
Git is?a version control system.
Git is?free software.
版本2:add distributed
Git is?a distributed version control system.
Git is?free software.
版本3:append GPL
Git is?a distributed version control system.
Git is?free software distributed under the GPL.
當然了,在實際工作中,我們腦子里怎么可能記得一個幾千行的文件每次都改了什么內容,不然要版本控制系統干什么。版本控制系統肯定有某個命令可以告訴我們歷史記錄,在Git中,我們用git log命令查看:
$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: ??Tue Aug 20 15:11:49 2013 +0800
?
????append GPL
?
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: ??Tue Aug 20 14:53:12 2013 +0800
?
????add distributed
?
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: ??Mon Aug 19 17:51:55 2013 +0800
?
????wrote a readme file
git log命令顯示從最近到最遠的提交日志,我們可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。
如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數:
$ git log --pretty=oneline3628164fb26d48395383f8f31179f24e0882e1e0?append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030?wrote a readme file
這些數字為commit id(版本號)和svn不一樣,Git的commit id不是1,2,3……遞增的數字?避免沖突
?
準備把readme.txt回退到上一個版本在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。
把當前版本“append GPL”回退到上一個版本“add distributed”,就可以使用git reset命令:
$ git reset?--hard HEAD^
HEAD is?now at?ea34578 add?distributed
看看readme.txt的內容是不是版本add distributed:
$ cat readme.txt
Git is?a distributed version control system.
Git is?free software.
如果再想回到上一個版本 通過版本號 返回到指定的版本 用cat <文件名> 查看內容
$ git reset?--hard 3628164
HEAD is?now at?3628164?append GPL
如果忘記版本號 可以通過git reflog??找尋你的每一次命令:
$ git?reflogea34578?HEAD@{0}: reset: moving?to?HEAD^
3628164 HEAD@{1}: commit: append?GPLea34578?HEAD@{2}: commit: add?distributedcb926e7?HEAD@{3}: commit?(initial): wrote?a?readme?file
小結:
HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。
要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。
轉載于:https://www.cnblogs.com/livelihood/p/6528781.html
總結
以上是生活随笔為你收集整理的2017-03-10Git版本回退的全部內容,希望文章能夠幫你解決所遇到的問題。