在Git中恢复已删除的分支
在Git中恢复已删除的分支
我不小心删除了我的分支,像这样:
git branch -D demo
但是我想恢复它...在执行git reflog
之后,我得到了下面的结果:
541b2f5 HEAD@{23}: checkout: 从demo切换到master
06fa6d5 HEAD@{24}: commit (merge): 删除变量和转换器的ajax调用
b84b60a HEAD@{25}: checkout: 从demo1切换到demo
我想用sha06fa6d5
创建分支...所以我尝试了这个:
git checkout -b demo 06fa6d5
git checkout -b demo HEAD@{24}
但是我没有得到那段代码...
问题出现的原因是分支被意外删除,解决方法如下:
1. 创建一个包含所有悬空或无法访问的提交的列表
git fsck --full --no-reflogs --unreachable --lost-found
2. 打印丢失和找到的所有提交的提交消息列表
ls -1 .git/lost-found/commit/ | xargs -n 1 git log -n 1 --pretty=oneline
3. 通过手动检查(即阅读)的过程找到丢失的提交
4. 使用丢失的提交创建一个新分支
git checkout -b branch-name SHA
以下是一些用户对解决方法的反馈:
- 有用户在Windows上使用mysisgit进行操作,需要稍微修改过程,因为"lost and found"目录没有位于任何合理的位置。用户使用git fsck...
的输出,并通过执行git log SHA
来检查每个提交的SHA(而不是blob或tree)。
- 另一个用户对解决方法进行了适应: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
- 有用户在Windows的git bash中使用Philippe的oneline命令,只需在 " cut -d\ -f3 " 中的"-d\ "之后添加一个额外的空格(在评论中无法显示,因为格式化会删除重复的空格)。
- 还有用户对解决方法表示赞赏。
在使用Git时,有时候会不小心删除了一个分支。这个问题的出现是因为在Git中,删除一个分支实际上只是删除了对该分支的引用,而不是真正删除了分支上的提交记录。所以,只要我们能找到该分支最后一次提交的sha1值,就可以恢复被删除的分支。
要找到被删除分支的最后一次提交的sha1值,我们可以使用以下步骤:
1. 首先,得到被删除分支最后一次提交的sha1值。
git reflog show --date=iso demo
2. 然后,使用以下命令来浏览该提交的历史记录,确保我们找到了正确的sha1值。
gitk sha1
一旦我们确定了被删除分支的最后一次提交的sha1值,我们就可以使用以下步骤来恢复被删除的分支:
1. 首先,使用以下命令创建一个新的分支,并将其指向被删除分支的最后一次提交的sha1值。
git branch demo sha1
2. 然后,使用以下命令来切换到新创建的分支。
git checkout demo
现在,我们成功地恢复了被删除的分支。通过这种方法,我们可以轻松地恢复任何被不小心删除的分支,并继续在该分支上进行开发工作。