在Git中恢复已删除的分支

30

我不小心像这样删除了我的分支:

git branch -D demo

但我想恢复它... 在运行git reflog命令后我得到了这个结果。

541b2f5 HEAD@{23}: checkout: moving from demo to master
06fa6d5 HEAD@{24}: commit (merge): remove ajax call for deleting variables and transfomers
b84b60a HEAD@{25}: checkout: moving from demo1 to demo

我想用 SHA 06fa6d5 创建一个分支……所以我尝试了这个:

git checkout -b demo  06fa6d5

git checkout -b demo  HEAD@{24}

但是我没有从那里得到代码...


1
你的命令是正确的,应该可以工作。但是你的问题缺少细节。 - Chronial
看起来这个问题已经解决了。我觉得这个回答很适合这种情况:https://dev59.com/5XA65IYBdhLWcg3wxRo8 - CodeFinity
2个回答

52
创建一个列出所有悬空或无法访问的提交的列表。
git fsck --full --no-reflogs --unreachable --lost-found

打印出所有在"lost and found"中的提交记录信息列表。

ls -1 .git/lost-found/commit/ | xargs -n 1 git log -n 1 --pretty=oneline

通过手动检查(即阅读),找到丢失的提交记录。

以丢失的提交记录作为分支头创建一个新分支。

git checkout -b branch-name SHA

4
太棒了!我在Windows上使用mysisgit完成了这个操作。由于失物招领目录不在任何明智的位置,所以我不得不稍微改变一下流程。我获取了git fsck...的输出,并通过执行git log SHA来检查每个“commit”的SHA(而不是blob或tree)。 - David West
12
我也试图适应它: git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\ -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt (说明:该命令用于在 Git 版本控制系统中查找丢失的提交,并将结果写入 .git/lost-found.txt 文件中。) - Philippe
5
Philippe的一行命令在Windows下的git bash中对我有用。我只需要在“cut -d\ -f3”中的-d\后面添加一个额外的空格(无法在评论中显示,因为格式会删除重复的空格)。 - BenL
不错,@Phillipe! - Diego Palomar

1

得到分支 demo 最后一次提交的潜在 sha1 后,使用 gitk sha1 实际浏览提交历史以确认您是否正确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接