您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Git中恢復(fù)被強(qiáng)制推送push失蹤的代碼怎么編寫,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Git是一個(gè)易學(xué)難精的分布式版本控制系統(tǒng),被我們碼農(nóng)常用于代碼的管理。如果你還不了解Git,建議先通過廖雪峰的Git教程進(jìn)行了解,再來看本文,因?yàn)楸疚囊允褂眉记蔀橹?,不?huì)在基礎(chǔ)名詞上做過多解釋。
在常規(guī)的開發(fā)流程中,難免有時(shí)因?yàn)楦鞣N原因(例如需要使用git rebase)會(huì)需要使用到git push -f,也就是強(qiáng)制推送,該命令會(huì)覆蓋遠(yuǎn)程分支。
但如果操作不當(dāng),會(huì)容易把小伙伴的之前提交的commit給覆蓋掉,不要慌,這并不代表你小伙伴的commit已經(jīng)永遠(yuǎn)找不回來了,大部分情況下,他們還是可以被找回的。
git reflog 可以查看所有分支的所有操作記錄(包括(包括commit和reset的操作),包括已經(jīng)被刪除的commit記錄,git log則不能查看已經(jīng)刪除了的commit記錄
雖然有reflog這跟救命稻草,但由于Git會(huì)定時(shí)gc(回收),清理掉reflog,所以被人覆蓋后不要等待太久才進(jìn)行恢復(fù)操作,不然可能就真的找不回了。
備份當(dāng)前工作區(qū)的數(shù)據(jù)
你可以使用git stash
等命令備份下現(xiàn)在正在寫的代碼
在命令行輸入git reflog/git log -g
顯示所有歷史操作,找到你需要的提交(包括已經(jīng)被刪除的commit記錄,git log則不能查看已經(jīng)刪除了的commit記錄)
2.1 強(qiáng)制回退到當(dāng)時(shí)被刪除的commit
git reset --hard <SHA1>
2.2 或者直接
git cherry-pick <SHA1>
直接把當(dāng)時(shí)版本的工作拿回來。不過如果有沖突的話還要處理沖突。
強(qiáng)推上遠(yuǎn)程分支
git push -f origin <branch>
如果引起commit丟失的原因并沒有記錄在reflog 中,比如運(yùn)行了rm -Rf .git/logs/
, 因?yàn)?reflog 數(shù)據(jù)是保存在 .git/logs/ 目錄下的,這樣就沒有 reflog 了。
可以使用 git fsck
工具,該工具會(huì)檢查倉(cāng)庫(kù)的數(shù)據(jù)完整性。如果指定 --full 選項(xiàng),該命令顯示所有未被其他對(duì)象引用 (指向) 的所有對(duì)象:
然后,用相同的方法就可以恢復(fù)它,即創(chuàng)建一個(gè)指向該 SHA 的分支。
是不是對(duì)于強(qiáng)推git push -f
不再慌了呢?
上述就是小編為大家分享的Git中恢復(fù)被強(qiáng)制推送push失蹤的代碼怎么編寫了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。