git reset 怎么还原_git reset –hard后的恢复操作
先說下我遇到的問題和解決辦法,然后再放原文。
我遇到的問題
在初始化一個(gè)比較大的項(xiàng)目時(shí),由于最后一次commit的文件數(shù)量較大,無(wú)法成功push,百度無(wú)果后想要撤回這次commit,于是手賤用了git reset --hard origin/master,結(jié)果commit是撤回了,但是文件也丟失了,且通過GitHub desktop客戶端是無(wú)法看到這次的reset記錄的,然后感覺,完了!文件找不回來(lái)了,抱著試試看的態(tài)度百度了一下,得知了有g(shù)it reflog這個(gè)命令,然后我看到了下面這個(gè)圖。
里面把你所有的git操作都記錄下來(lái)了,包括git reset --hard xx。
所以肯定是可以找回我的文件的,話不多說直接上解決辦法,原理解釋留給后面的精彩原文。
解決辦法
git reset --hard dea3f790
然后我的59630個(gè)丟失文件就回來(lái)了。
精彩原文(幽默風(fēng)趣的詳細(xì)解讀)
看到這個(gè)標(biāo)題,你以為能恢復(fù)??
。。。轉(zhuǎn)載過來(lái)以為是能挽救git reset –hard的神技,然而不是。。。
看到這篇的同學(xué)可以有個(gè)心理安慰了,這邊還有沒提交修改就rest,想撞墻的想剁手的。。。
劃重點(diǎn),使用git reset –hard(此參數(shù)有毒)之前一定要git commit或者 git add 或者 git stash或者。。。
假如你這些操作都沒有執(zhí)行的話,博主還有一個(gè)找了多年的方法能挽救。。。
那是一個(gè)風(fēng)雨交加的夜晚,博主頭頂十米長(zhǎng)的避雷針,一聲驚雷下來(lái),哇咔咔!博主穿越到還沒rest之前的時(shí)空!!哈哈哈哈天無(wú)絕人之路啊!!!
《轉(zhuǎn)》Git 撤銷commit的注意事項(xiàng) http://www.cnblogs.com/scodong/p/4757378.html
Git撤銷commit的操作命令 git reset --hard HEAD^
一、新建三個(gè)文件,demo1,demo2,demo3
二、git add 命令提交到暫存區(qū),git reset HEAD demo1就是把提交到暫存區(qū)里的文件撤銷。
上圖中,執(zhí)行g(shù)it reset HEAD demo1就會(huì)把demo1從暫存區(qū)中撤銷,現(xiàn)在是untracked.
三、git commit 提交本地倉(cāng)庫(kù)
上圖中顯示,git commit把demo2,demo3提交到本地倉(cāng)庫(kù)中。
四、現(xiàn)在想撤銷之前的commit,可以用git reset --hard HEAD^命令
第三步中,先commit demo2,再commit demo3,因此現(xiàn)在的HEAD即是demo3的commit值。
(HEAD是指向最新的提交,上一次提交是HEAD^,上上次是HEAD^^,也可以寫成HEAD~2 ,依次類推)
因此git reset --hard HEAD 就是把最新提交的demo3撤銷掉,撤銷是非常徹底的,本地文件也會(huì)刪除?!C特么說這么多,你到是把這句放在最上面啊
恢復(fù) git reset -hard 的誤操作 ——這是有commit操作的,之前要有這操作,我還來(lái)百度?
此部分內(nèi)容轉(zhuǎn)自:https://www.cnblogs.com/mliudong/archive/2013/04/08/3007303.html
有時(shí)候使用Git工作得小心翼翼,特別是涉及到一些高級(jí)操作,例如 reset, rebase 和 merge。甚至一些很小的操作,例如刪除一個(gè)分支,我都擔(dān)心數(shù)據(jù)丟失。
不久之前,我在做一些大動(dòng)作(rebasing)之前,我總是備份整個(gè)版本庫(kù),以防萬(wàn)一。直到最近我才發(fā)現(xiàn)git的歷史記錄是不可修改的,也就是說你不能更改任何已經(jīng)發(fā)生的事情。你做的任何操作都只是在原來(lái)的操作上修改。也就是說,即使你刪除了一個(gè)分支,修改了一個(gè)提交,或者強(qiáng)制重置,你仍然可以回滾這些操作。
讓我們來(lái)看一些例子:
你現(xiàn)在看git的歷史記錄,你可以看到兩次提交:
現(xiàn)在讓我們來(lái)重置回第一次提交的狀態(tài):
這看起來(lái)我們是丟掉了我們第二次的提交,沒有辦法找回來(lái)了。但是 reflog 就是用來(lái)解決這個(gè)問題的。簡(jiǎn)單的說,它會(huì)記錄所有HEAD的歷史,也就是說當(dāng)你做 reset,checkout等操作的時(shí)候,這些操作會(huì)被記錄在reflog中。
所以,我們要找回我們第二commit,只需要做如下操作:
再來(lái)看一下 git 記錄:
所以,如果你因?yàn)閞eset等操作丟失一個(gè)提交的時(shí)候,你總是可以把它找回來(lái)。除非你的操作已經(jīng)被git當(dāng)做垃圾處理掉了,一般是30天以后。
總結(jié)
以上是生活随笔為你收集整理的git reset 怎么还原_git reset –hard后的恢复操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: canva画图 图片居中裁剪_Canva
- 下一篇: oracle创建序列seq起始值为1_O