如何恢复误删的Git远程分支?异地提交无法通过git fsck/reflog找回
如何找回误删的Git分支(无法访问本地仓库场景)
听起来你遇到了个棘手的情况——在家用电脑误删了要合并到dev的分支,现在没法碰那台电脑,还忘了分支名,连常规的git fsck和reflog都帮不上忙。别慌,既然提交是在另一台电脑完成的,我们可以从提交源电脑入手解决,下面是具体步骤:
1. 从提交过的电脑定位目标提交
那台你完成提交的电脑里,肯定还保留着那些提交的记录(除非你在那台电脑也做了清理):
- 先运行
git log --all --oneline,--all参数会列出仓库里所有存在的提交,不管有没有分支指向它们。你可以通过提交消息、修改内容的记忆,找到属于误删分支的提交哈希值。 - 如果记得提交的大致时间,用时间范围缩小查找:
git log --all --oneline --since="YYYY-MM-DD" --until="YYYY-MM-DD",替换成你提交的时间段。
2. 重建分支并同步到可访问环境
找到目标提交的哈希(比如a1b2c3)后:
- 直接在这台电脑上创建临时分支:
git checkout -b recovered-branch a1b2c3 - 如果有团队远程仓库,把这个分支推上去:
git push origin recovered-branch,这样你就能在任何能访问远程的电脑上拉取,再合并到dev分支。 - 如果没有远程仓库,导出提交补丁:
git format-patch <起始提交哈希>..<结束提交哈希>(单个提交的话用a1b2c3^..a1b2c3),生成的.patch文件可以拷贝到你能操作的电脑,用git apply patch-file.patch把提交应用到dev分支。
3. 若必须从家用电脑恢复(需他人协助)
如果提交源电脑也没法操作,只能依赖家用电脑,那得找能访问那台电脑的人帮忙:
- 让他们运行
git fsck --lost-found,这个命令会把所有未被分支/标签引用的提交、树对象放到.git/lost-found/commits目录里。 - 逐个查看这些提交的内容:
git show <提交哈希>(目录里的文件名就是提交哈希),找到对应你误删分支的提交。 - 找到后重建分支:
git checkout -b recovered-branch <提交哈希>,再推送到远程或者导出补丁给你。
重要提示
- Git默认会保留未被引用的提交至少30天,只要家用电脑没运行过
git gc --prune=now这类强制清理命令,数据大概率还在。 - 以后记得把重要分支推到远程仓库做备份,避免本地误删这种尴尬情况。
内容的提问来源于stack exchange,提问作者Volodymyr Duday
相关产品推荐
相关产品推荐

