非特殊情況 git push -f origin master 不要亂用
操作方法
備份當(dāng)前工作區(qū)的數(shù)據(jù)
你可以使用git stash等命令備份下現(xiàn)在正在寫的代碼
1.1在命令行輸入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>
或者
git cherry-pick <SHA1>
直接把當(dāng)時(shí)版本的工作拿回來(lái)。不過(guò)如果有沖突的話還要處理沖突崭篡。
3.1強(qiáng)推上遠(yuǎn)程分支
git push -f origin <branch>
如果引起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ì)象: