本文首發於公衆號「AntDream」,歡迎微信搜索「AntDream」或掃描文章底部二維碼關注,和我一塊兒天天進步一點點linux
git reset --hard XXX
,以前的commit
的內容還能找回來嗎?首先,通過以前的學習,咱們起碼知道,執行完 reset
回滾commit之後,以前的commit其實沒有被刪除,確定還在的。git
要找回以前的 commit
的內容,那咱們勢必得知道對應的commit 的SHA-1值吧,這個時候用git log
是看不到的。bash
以前咱們曾經提到過,就是 .git
目錄下有一個 logs
目錄,裏面記錄了全部HEAD改變的記錄,包括分支操做(新建、切換等),commit操做(新commit,reset等)。那咱們以前 reset
也是更改了HEAD,因此這裏面確定會有咱們的記錄。能夠用下面的方法拿到:微信
//是的,你沒看錯,加個 -g 參數就看獲得了
git log -g
//或者是下面的命令
git reflog
複製代碼
拿到以前的 commit
信息以後,咱們就能找回對應的提交記錄了學習
//能夠新建一個分支指向對應的提交
git branch branchName commitId
複製代碼
上面 撤銷add 一節中咱們用的命令並不會刪除工做目錄中的文件,可是萬一你一不當心漏掉了 --cached
參數,那效果就不同了,會把工做目錄和暫存區中的文件記錄都會刪除。ui
能夠從垃圾桶裏面還原出來嗎?spa
rm
這個命令是linux命令,文件一旦經過 rm
命令刪除,則沒法恢復。好比:code
//這樣執行刪除,new.txt不會出如今垃圾桶
rm new.txt
複製代碼
要想知道刪除的文件能不能找回來,咱們先得明白咱們的文件信息存在於哪些地方。主要是3個:cdn
若是咱們前面是經過上面的 rm
命令刪除了工做目錄的文件,那咱們能夠從暫存區裏面把文件恢復出來:string
git checkout -- new.txt
複製代碼
若是咱們是一開頭的那種狀況,用 git rm
命令,就會把暫存區和工做區都刪除了,那還能夠從最近的 commit
中恢復(固然前提是你以前已經提交過了):
git checkout HEAD readme.txt
複製代碼
因此綜上,仍是推薦你們儘可能不要用帶有 rm
的命令,撤銷 add
操做用 reset
命令。
reset
命令操做的都是跟 commit
相關的,好比把分支重置到某次 commit
,把某些文件重置到某次 commit
對應的文件版本等。
同時,若是不知道怎麼操做,能夠用 git status
命令,它會提示一些操做:
//在 add 以後執行
git status
//輸出
On branch master
Changes to be committed:
//這句就是提示咱們,若是後悔add了,能夠用下面的 reset命令
(use "git reset HEAD <file>..." to unstage)
modified: myTest.txt
複製代碼
歡迎關注個人公衆號查看更多精彩文章!
複製代碼