這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Git中恢復(fù)被強(qiáng)制推送push失蹤的代碼怎么編寫(xiě),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
網(wǎng)站制作、成都網(wǎng)站制作的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒(méi)有做好網(wǎng)站,給創(chuàng)新互聯(lián)公司一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。
Git是一個(gè)易學(xué)難精的分布式版本控制系統(tǒng),被我們碼農(nóng)常用于代碼的管理。如果你還不了解Git,建議先通過(guò)廖雪峰的Git教程進(jìn)行了解,再來(lái)看本文,因?yàn)楸疚囊允褂眉记蔀橹?,不?huì)在基礎(chǔ)名詞上做過(guò)多解釋。
在常規(guī)的開(kāi)發(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)找不回來(lái)了,大部分情況下,他們還是可以被找回的。
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)在正在寫(xiě)的代碼
在命令行輸入git reflog/git log -g
顯示所有歷史操作,找到你需要的提交(包括已經(jīng)被刪除的commit記錄,git log則不能查看已經(jīng)刪除了的commit記錄)
2.1 強(qiáng)制回退到當(dāng)時(shí)被刪除的commit
git reset --hard
2.2 或者直接
git cherry-pick
直接把當(dāng)時(shí)版本的工作拿回來(lái)。不過(guò)如果有沖突的話還要處理沖突。
強(qiáng)推上遠(yuǎn)程分支
git push -f origin
如果引起commit丟失的原因并沒(méi)有記錄在reflog 中,比如運(yùn)行了rm -Rf .git/logs/
, 因?yàn)?reflog 數(shù)據(jù)是保存在 .git/logs/ 目錄下的,這樣就沒(méi)有 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失蹤的代碼怎么編寫(xiě)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。