Git后悔藥之代碼回退

1、撤銷操作

git.png

一來就是一張大圖,如果不太了解git的人會有點蒙,下面簡單解釋一下(都是我個人的理解,如果不妥還請指正),git倉庫的初始化以及clone這些在這里就不講了,請自行百度。

遠程倉庫:就是在github或者在gitlab上的代碼??梢杂?code>git pull和git push來進行本地倉庫和遠程倉庫的同步操作。

版本庫:每一次的commit都會生成一個記錄,每個記錄都有一個hash值來唯一標識,很多很多的commit就形成了版本庫。為什么圖上有兩個版本庫?那是因為上面那個版本庫是commit前,下面那個版本庫是commit后。

工作區(qū):當我們把遠程倉庫的代碼clone下來后,一般會默認在分支master上,此時,該分支的所有代碼都在本地,這就是當前的工作區(qū),以后的每一次commit都會在這個分支上記錄。

暫存區(qū):這個應該大家最容易理解錯的,也是用習慣了svn的朋友最不理解的地方。每次修改了代碼后,都需要用git add來講工作區(qū)的修改記錄到暫存區(qū),然后我們再用git commit來講暫存區(qū)的內容提交到版本庫,當然這里也可以用git commit -a命令一步到位

上面這張圖就簡單描述了我們每次的修改,用什么命令流轉到什么區(qū)的一個示意圖。

2、版本回退

前提條件:已經執(zhí)行git commit命令了,但是沒有push到遠程倉庫,用以下命令可以回退

git reset --hard HEAD^

上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。其實這個回退就是將本地的HEAD指針移動到某個版本上而已,所以這個操作是非??斓?。

git log    [查看commit記錄]
//這個3628164 是一個commit版本號,可以指定回退到那個版本
git reset --hard 3628164 

查看提交記錄,也能看到每一次提交的版本號,這是一個很長的哈希值,這個時候我們通過這個版本號可以指定回退到某個版本上,用這個版本號的時候可以只用它前面幾位,具體幾位看你心情咯,只要能唯一標識這個版本就ok。

git reflog [查看本地會影響HEAD指針的命令操作記錄,這個不會同步到遠程倉庫]

強調一下,注意這里是記錄的會影響HEAD指針的操作記錄。
簡單舉例說一下這個git reflog的使用場景。git reflog
假如當前我有三次提交,再假設三次提交的版本號分別為commitnum1,commitnum2,commitnum3,并且我當前處于commitnum3這個版本上(也就是HEAD指向了commitnum3),這個時候我用命令git reset --hard commitnum2就回退到了comminum2了,好,問題來了,如果突然又想回到commitnum3怎么辦呢,當然你可以翻看上去看記錄,那個版本號還能看到,但是如果這是第二天了,已經翻不上去了就麻煩了,這個時候git reflog就出場啦,他可以看到你昨天執(zhí)行git reset --hard commitnum2命令的時候的所在版本號,這個時候就可以用git reset --hard commitnum3來恢復回去。

git_reflog.png

這個結果分三部分,前面黃色的文字就是執(zhí)行那次命令時所在的版本號,中間的HEAD@[0]是就是HEAD指針變更記錄,最后面就是那次命令所做的事情。

最后再啰嗦一點,如果這些commit都還沒有同步到遠程倉庫,你reset后那些commit記錄是不會被同步上去的。但是,如果已經同步上去了,就算你本地reset了,雖然本地工作區(qū)內容變成了你想要的了,但是記錄就抹不去了。

參考:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,853評論 1 26
  • 這會我心里很復雜! 與幾位遠道而來的老朋友聽完音樂會后必須宵夜——音樂會是我來帝都之后,聽到的最好的國外歌唱家的表...
    黃虎閱讀 239評論 3 3
  • 從前有個小男孩住在他的姑姑家,他有一個鄰居是小女孩,從小他們的關系非常好幾乎要超出朋友間的關系。有一天他們在一起...
    董祭酒閱讀 738評論 2 1
  • 早年對家鄉(xiāng)是沒有概念的,更是模糊的。每當有人問我是哪里人時,常常要想一想,自己都不知道自己是哪里人。是啊,生于四川...
    貓姐姐的愛情實驗室閱讀 646評論 8 6
  • 大四那一年,我放棄外保,留在本校,沒什么理由吧,現(xiàn)在我有些懷疑當初是哪來的放棄的勇氣。 實話說,我對專業(yè)其...
    no_body閱讀 213評論 0 0

友情鏈接更多精彩內容