一、問(wèn)題
有時(shí)候在 git stash 非常有用,但是我們能由于一些錯(cuò)誤的操作,導(dǎo)致將 git stash 中內(nèi)容被刪除掉,誤刪 stash.
二、知識(shí)點(diǎn)
git fsck
命令用于檢查 Git 倉(cāng)庫(kù)中的對(duì)象的完整性和一致性。它可以發(fā)現(xiàn)和報(bào)告一些潛在的問(wèn)題,比如損壞的對(duì)象、丟失的對(duì)象引用等。
-
檢查對(duì)象完整性:確保所有的對(duì)象(提交、文件樹(shù)、文件等)在物理上存在且沒(méi)有損壞。如果有對(duì)象損壞,
git fsck
將報(bào)告并顯示問(wèn)題。 -
尋找不可達(dá)對(duì)象:Git 使用引用來(lái)跟蹤對(duì)象,如果某個(gè)對(duì)象沒(méi)有任何引用指向它(即不可達(dá)對(duì)象),
git fsck
會(huì)發(fā)現(xiàn)并報(bào)告這些不可達(dá)的對(duì)象。 -
查找丟失的對(duì)象引用:它會(huì)檢查是否存在引用(比如分支、標(biāo)簽等),但沒(méi)有對(duì)應(yīng)的對(duì)象存在。這可能是因?yàn)閯h除了對(duì)象或引用指向了一個(gè)不存在的對(duì)象。
-
輸出報(bào)告:將列出發(fā)現(xiàn)的問(wèn)題,并提供相應(yīng)的修復(fù)建議或提示。
三、復(fù)制一個(gè)副本
為了安全和不熟練操作 git stash 的同學(xué),將當(dāng)前項(xiàng)目準(zhǔn)備一個(gè)副本,在副本中進(jìn)行操作,防止第一個(gè)現(xiàn)場(chǎng)丟失。
四、查看 unreachable 列表
切換到副本中,所有的操作放在副本進(jìn)行:
git fsck --unreachable
查看所有unreachable
的記錄, 如同下面的例子:
git fsck --unreachable
Checking object directories: 100% (256/256), done.
unreachable blob 08a0724cff104d83f3c261b68487e5b5dfb0bc92
unreachable blob 09e0e7369d8c60923a53c8097674dde7f71a0cc0
unreachable blob 0b00205b03a9d5a7c311907b968d41da09ee0662
unreachable blob 0ba035459d1ce597a1cbba64a5f1073c467af198
unreachable blob 0f8093bb5835971fad89f8274387d15d38eba9c7
unreachable blob 11205462d9730314c6ac8f0320ef0c6247af4b7a
五、將 unreachable 內(nèi)容提取到編輯器中
最好準(zhǔn)備一個(gè)編輯器,將所有的內(nèi)容復(fù)制出來(lái),因?yàn)檫@個(gè)列表可能很長(zhǎng),在終端展示有限,也不好搜索,將其復(fù)制出來(lái)放在編輯器中(vscode)在內(nèi)過(guò)多的時(shí)候有查找等優(yōu)勢(shì)。
六、 認(rèn)識(shí) unreachable 分類(lèi)
類(lèi)型 | 描述 |
---|---|
Commit | 不再有分支或標(biāo)簽指向的提交 |
Tree | 不再有提交指向的文件樹(shù) |
Blob | 不再有文件樹(shù)指向的文件對(duì)象 |
Tag | 不再有分支或提交指向的標(biāo)簽 |
unreachable | 一般表示 Git 對(duì)象的一部分,但由于沒(méi)有引用指向它們,因此被視為不可達(dá) |
這里我們重點(diǎn)關(guān)注
commit
對(duì)象。
七、git show +
展示信息
git show <sha>
根據(jù)返回的信息,判斷是不是我們需要恢復(fù)的內(nèi)容,根據(jù)個(gè)人經(jīng)驗(yàn), commit 是我們需要恢復(fù)的內(nèi)容可能比較大
八、恢復(fù)
有目標(biāo)的 sha key, 然后切換到 stash 的分支, 執(zhí)行:
git stash apply + <sha>
可能會(huì)出現(xiàn)如下的錯(cuò)誤:
fatal: '' is not a stash-like commit
解決辦法:使用 merge 命令
# 如果有合并沖突,解決沖突
git merge +<sha>
在副本中已經(jīng)完成,相同的操作在目標(biāo)項(xiàng)目中重新實(shí)現(xiàn)一次即可。
九、小結(jié)
本文主旨在恢復(fù)刪除的 git stash 存儲(chǔ)的內(nèi)容,從副本出發(fā),結(jié)合git fsck
命令獲取unreachable
列表,然后,根據(jù)自己的項(xiàng)目 使用git show
查看unreachable
對(duì)象中的內(nèi)容,找到目標(biāo)對(duì)象,然后使用git stash apply
或者git merge
進(jìn)行合并。如果這些操作符合我們的目標(biāo),在正式項(xiàng)目中重新演繹一次即可。
-
終端
+關(guān)注
關(guān)注
1文章
1204瀏覽量
30906 -
編輯器
+關(guān)注
關(guān)注
1文章
822瀏覽量
32045 -
Git
+關(guān)注
關(guān)注
0文章
205瀏覽量
16221
原文標(biāo)題:恢復(fù)被刪除的Git stash 記錄
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
stm32cubemax在線升級(jí)后,原來(lái)建立的工程被刪除了,如何恢復(fù)?
git shell 常用命令
手機(jī)通訊記錄被刪除怎么辦?
QQ聊天記錄怎么恢復(fù)
恢復(fù)Unix系統(tǒng)被刪除地文件
蘋(píng)果手機(jī)備忘錄刪除了怎么恢復(fù)?誤刪備忘錄找回教程
蘋(píng)果手機(jī)短信刪除了怎么恢復(fù)?就用開(kāi)心手機(jī)恢復(fù)大師

陌陌恢復(fù)大師:蘋(píng)果陌陌聊天記錄恢復(fù)教程

蘋(píng)果恢復(fù)大師告訴你:微信刪除后怎么恢復(fù)聊天記錄

評(píng)論