git 誤刪分支后恢復方法
由于本人在開發的時候刪除了分支,花費了一天的時間才將代碼恢復,故此整理了如果誤刪git代碼后的恢復方法
方法 1:通過本地 reflog 恢復(推薦)
查找分支刪除記錄
git reflog | grep -i 'delete.*branch'
輸出示例:
7a1b2c3 HEAD@{2}: pull origin main: Fast-forward
9d8e7f6 HEAD@{3}: checkout: moving from feature/login to main
123456a HEAD@{4}: commit: Update login logic
e5f43d0 HEAD@{5}: branch: Delete branch feature/payment # ← 刪除記錄
找到刪除前的提交ID(e5f43d0)
git branch <分支名> <提交ID> # 創建新分支指向舊位置
git branch feature/payment e5f43d0
驗證恢復
git checkout feature/payment
git log --oneline -3 # 檢查歷史記錄
方法 2:恢復遠程分支(如果曾經推送過)
查看遠程引用
git ls-remote origin
如果發現刪除的分支引用(可能存在于其他成員的本地)
找回最后的提交ID(假設為 a1b2c3d)
本地重建分支
git branch feature/payment a1b2c3d
推送到遠程
git push origin feature/payment
方法 3:使用 fsck 找回懸空提交(reflog 失效時)
查找孤立(懸空)提交
git fsck --full --no-reflogs --unreachable --lost-found | grep commit
檢查可疑提交(會顯示在 .git/lost-found 目錄)
cd .git/lost-found/commit
cat * | less # 查看提交內容
找到正確提交后重建分支
git branch recovered-feature <提交ID>
?? 找回已刪除的未提交更改
恢復未暫存的修改
查找 .git 自動備份
find .git -name '*.gz' -exec ls -l {} \;
嘗試解壓最近的備份文件
gunzip .git/saved/path/*.gz
恢復已暫存但未提交的更改
查找所有引用日志
git reflog --all
檢查索引狀態
git fsck --cache --no-reflog --lost-found
? 恢復后的驗證步驟
運行 git show <分支名> 確認內容完整
檢查關鍵文件是否存在:git ls-tree -r <分支名> | grep 文件名
運行測試:npm test 或項目特定測試
比對歷史記錄:git log --graph --oneline --decorate --all
防止誤刪的防護措施
配置禁止強制刪除本地分支
git config --global alias.delete 'branch -d'
git config --global alias.delete-remote 'push origin --delete'
設置分支保護(GitLab/GitHub)
在倉庫設置中啟用 protected branches
禁止對 main 和 release* 分支直接推送
創建刪除前檢查腳本
echo '#!/bin/sh
echo "?? Deleting branch $1 - Last commit: $(git log -1 --format=%s $1)"
read -p "Confirm deletion? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
echo "Deletion cancelled"
exit 1
fi
' > .git/hooks/pre-delete
chmod +x .git/hooks/pre-delete
?? 最佳實踐:使用自動化備份
創建每日分支快照
0 2 * * * git for-each-ref --format='%(refname:short)' refs/heads | xargs -I{} git bundle create ~/git-backups/$(date +\%Y\%m\%d)-{}.bundle {}
?? Git 刪除恢復成功率統計
情況 恢復成功率 時間窗口
剛刪除(有 reflog) 98% 30天內
有遠程追蹤分支 95% 無期限
未推送分支+reflog過期 60% 取決于GC設置
未提交的更改 <30% 極小
??緊急提示??:誤刪后立即停止操作!每次提交都會減少恢復成功率
通過上述方法,大多數誤刪都能有效恢復。關鍵操作流程:檢查 reflog → 驗證遠程狀態 → 嘗試 fsck → 設置防護避免再次發生。

浙公網安備 33010602011771號