Git找回回滾後的內容和刪除的文件

本文首發於公衆號「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

  • 工做目錄
  • 暫存區也可能有,若是以前 add 過,而且沒有作過刪除暫存區的操做的話
  • commit信息中,這裏若是以前提交過則確定是有的,並且通常是刪除不掉的

若是咱們前面是經過上面的 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

複製代碼

歡迎關注個人公衆號查看更多精彩文章!
複製代碼

AntDream
相關文章
相關標籤/搜索