首頁 > 系統教程 > Linux > 主體

教你找回 git stash 數據中的數據

PHPz
發布: 2024-01-07 10:21:45
轉載
1189 人瀏覽過
導讀 由於不正確的 git 指令,他把儲存在 stash 中的變更刪除了。在這悲傷的情節之後,我們試圖尋找一種恢復他所做工作的方法,而我們做到了!首先警告一下:當你在實現一個大功能時,請將它分成小塊並定期提交。長時間工作而不做提交並不是一個好習慣。下面就示範怎樣從 stash 中恢復誤刪的變更。
建立測試分支

我用作範例的倉庫中,只有一個原始檔案 “main.c”,如下所示:

教你找回 git stash 数据中的数据
# 它只有一次提交,即 “Initial commit”:
教你找回 git stash 数据中的数据

該檔案的第一個版本是:

教你找回 git stash 数据中的数据

#我將在文件中寫一些程式碼。對於這個例子,我並不需要做什麼大的改動,只需要有東西放進 stash 中即可,所以我們只增加一行。 “git diff” 的輸出如下:
教你找回 git stash 数据中的数据

誤操作git stash

現在,假設我想從遠端倉庫中拉取一些新的更改,當時我還不打算提交我自己的更改。於是,我決定先 stash 它,等拉取遠端倉庫中的變更後,再把我的變更恢復應用到主分支上。我執行下面的命令將我的更改移動到 stash 中:

git stash
登入後複製

使用指令"git stash list" 查看 stash,在這裡能看到我的變更:

教你找回 git stash 数据中的数据

#我的程式碼已經在一個安全的地方,而且主分支目前是乾淨的(使用指令 git status檢查)。現在我只需要拉取遠端倉庫的更改,然後把我的更改恢復應用到主分支上,而且我也應該是這麼做的。

但是我錯誤地執行了命令:

git stash drop
登入後複製

它刪除了 stash,而不是執行了下面的命令:

stash pop
登入後複製

這條指令會在從堆疊中刪除 stash 之前套用它。如果我再次執行指令 git stash list,就能看到在沒有從堆疊中將變更還原到主分支的之前,我就刪除了它。 OMG!接下來怎麼辦?

找回git stash 資料

好消息是:git 並沒有刪除包含了我的更改的對象,它只是移除了對它的引用。為了證明這一點,我使用命令 git fsck,它會驗證資料庫中物件的連接和有效性。這是我對該倉庫執行了 git fsck 之後的輸出:
教你找回 git stash 数据中的数据

由於使用了參數 --unreachable,我讓 git-fsck 顯示所有無法存取的物件。正如你所看到的,它顯示並沒有不可訪問的物件。而當我從 stash 中刪除了我的更改之後,再次執行相同的指令,得到了一個不一樣的輸出:
教你找回 git stash 数据中的数据

現在有三個不可存取物件。那麼哪一個才是我的改變呢?實際上,我不知道。我需要透過執行指令 git show 來搜尋每一個物件。

教你找回 git stash 数据中的数据

#就是它! ID 號碼 95ccbd927ad4cd413ee2a28014c81454f4ede82c 對應了我的變更。現在我已經找到了丟失的更改,我可以恢復它。其中一種方法是將此 ID 取出並放進新的分支,或直接提交它。如果你得到了你的更改物件的 ID 號,就可以決定以最好的方式,將變更再次恢復應用到主分支上。對於這個例子,我使用 git stash 將變更還原到我的主分支上。

git stash apply 95ccbd927ad4cd413ee2a28014c81454f4ede82c
登入後複製

另外要重點記住的是 git 會週期性地執行它的垃圾回收程式(gc),它執行之後,使用 git fsck 就不能再看到不可存取物件了。

以上是教你找回 git stash 數據中的數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:linuxprobe.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板