在Git中恢复已删除的分支

New*_*ddy 24 git git-branch

我错误地删除了我的分支,如下所示:

git branch -D demo
Run Code Online (Sandbox Code Playgroud)

但是我想要恢复它...我之后得到了它 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
Run Code Online (Sandbox Code Playgroud)

我想用sha创建分支06fa6d5...所以我尝试了这个:

git checkout -b demo  06fa6d5

git checkout -b demo  HEAD@{24}
Run Code Online (Sandbox Code Playgroud)

但是我没有从中得到代码......

vit*_*hal 38

创建所有悬空或无法访问的提交列表.

git fsck --full --no-reflogs --unreachable --lost-found
Run Code Online (Sandbox Code Playgroud)

打印丢失和找到的所有提交的提交消息列表.

ls -1 .git/lost-found/commit/ | xargs -n 1 git log -n 1 --pretty=oneline
Run Code Online (Sandbox Code Playgroud)

通过手动检查(即阅读)过程找到您遗失的提交.使用缺少的提交创建一个新分支作为分支头.

git checkout -b branch-name SHA
Run Code Online (Sandbox Code Playgroud)

  • 我也一直在调整它:`git fsck --full --no-reflogs --unreachable --lost-found | grep commit | 切-d\-f3 | xargs -n 1 git log -n 1 --pretty = oneline> .git/lost-found.txt` (7认同)
  • Philippe的oneline命令在git bash for windows中为我工作.我只需要在"cut -d\-f3"之后的-d \之后添加一个额外的空格(由于格式化删除了重复的空格,因此无法在注释中显示它) (5认同)
  • 那太精彩了.我在windows上使用mysisgit做了这个.不得不稍微改变过程,因为丢失和找到的目录不在任何合理的地方.我接受了`git fsck ...`的输出,并通过执行`git log SHA'检查了每个`commitmit`(不是blob或tree)的SHA. (4认同)