Git倉(cāng)庫(kù)是目前很主流的代碼管理工具,一旦被損壞或出現(xiàn)異常,內(nèi)心想直接吐血。
當(dāng)進(jìn)入到Git倉(cāng)庫(kù)執(zhí)行命令:
git status
顯示:
fatal: bad object HEAD
在此嘗試用git checkout git reflog 等命令希望能恢復(fù),但都是提示錯(cuò)誤。在網(wǎng)上搜索大部分看到的是如下的解決方式:
git pull origin hongchangfirst
將遠(yuǎn)程分支的內(nèi)容重新sync下來(lái)即可。
但是我的代碼分支很久沒(méi)有和服務(wù)器的分支同步,主要是做本機(jī)的開(kāi)發(fā)和維護(hù),無(wú)法用上面的命令來(lái)解決。
突然想到了git的代碼是壓縮過(guò),用的是SHA-1哈希做的索引管理,分支是通過(guò)同名文件+SHA-1哈希管理,根據(jù)這一思路開(kāi)始搜索分支同名文件。
假設(shè)我分支名為:v2_pro_ipv6
當(dāng)前分支名可以嘗試執(zhí)行分支命令獲?。?/p>
$ git branch
如果當(dāng)前分支名都無(wú)法獲取可以在以下文件中查到:
$ cat .git/HEAD
ref: refs/heads/v2_pro_ipv6
至此已經(jīng)確定了當(dāng)前分支的名稱:v2_pro_ipv6
先進(jìn)入代碼的.git目錄:
$ cd .git/
搜索當(dāng)前分支的同名文件:
$ find -name "v2_pro_ipv6"
./refs/remotes/local_server/v2_pro_ipv6
./refs/heads/v2_pro_ipv6
./logs/refs/remotes/local_server/v2_pro_ipv6
./logs/refs/heads/v2_pro_ipv6
去對(duì)應(yīng)目錄打開(kāi)對(duì)應(yīng)的分支同名文件,拉倒文件的最后一行,正常的話最后一行是一個(gè)空白行,如果異常的話,顯示會(huì)是亂碼如:
NULNULNULNULNULNULNULNUL
把文件中這行亂碼的內(nèi)容刪掉,但還是要保留文件的最后一行為空行。
重點(diǎn)
打開(kāi).git\logs\refs\heads\v2_pro_ipv6文件,拉倒最后,就會(huì)看到出git現(xiàn)異常時(shí)最后一次提交的信息,我的是:
66fed7f2fd90cc003fa31475ff19fb673ebff3fe a3f70edf4fa72c320d48fcc477189ea40ac98407 admin <yinluo@yinluo.com> 1642210854 +0800 commit: 更新: APK 2022-1-14
a3f70edf4fa72c320d48fcc477189ea40ac98407 98b9d84c7725cf2f160154866e8cab33582ebc67 admin <yinluo@yinluo.com> 1642211131 +0800 commit: 添加:關(guān)閉spk mute靜音功能sys.audio.spkmute.status
98b9d84c7725cf2f160154866e8cab33582ebc67 e0adae9cff4df7ea3f46f2e3cfecc9efde45efb5 admin <yinluo@yinluo.com> 1642211605 +0800 commit: 更新:wifi驅(qū)動(dòng) rkwifi/bcmdhd v100.10.545.25
細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)每一行的定義規(guī)律,每行的開(kāi)頭兩組是我們commit 的SHA-1哈希碼。第一組SHA-1哈希是倒數(shù)第二次的提交,第二組是倒數(shù)第一次提交的SHA-1哈希。我們需要的就是第二組SHA-1哈希:
e0adae9cff4df7ea3f46f2e3cfecc9efde45efb5
把這組SHA-1哈希復(fù)制到一下文件:
打開(kāi)文件:
.git\refs\heads\v2_pro_ipv6
看里面是否有內(nèi)容,如果有的話,先在其他目錄拷貝備份一下這個(gè)文件。然后把源文件的內(nèi)容清空。
寫(xiě)入查到的SHA-1哈希碼加回車換行:
e0adae9cff4df7ea3f46f2e3cfecc9efde45efb5
保持git文件中的最后一行為空行。
修改分支同名文件后,返回shell中執(zhí)行g(shù)it log 進(jìn)行測(cè)試,如果操作正常,一切就能恢復(fù)如初了:
$ git log
commit e0adae9cff4df7ea3f46f2e3cfecc9efde45efb5
Date: Sat Jan 15 09:53:25 2022 +0800
更新:wifi驅(qū)動(dòng) rkwifi/bcmdhd v100.10.545.25
commit 98b9d84c7725cf2f160154866e8cab33582ebc67
Date: Sat Jan 15 09:45:31 2022 +0800
添加:關(guān)閉spk mute靜音功能sys.audio.spkmute.status
commit a3f70edf4fa72c320d48fcc477189ea40ac98407
Date: Sat Jan 15 09:40:54 2022 +0800
?最后,git要注意間隔一段時(shí)間就要和git主服務(wù)器做代碼同步,以免git出現(xiàn)致命錯(cuò)誤導(dǎo)致全盤(pán)皆廢。另外注意點(diǎn)是在修改文件時(shí),一定要記得保存哦!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-433814.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-433814.html
到了這里,關(guān)于git提交的時(shí)候出現(xiàn)異?!癰ad object HEAD”的另一種解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!