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