是的,您应该能够执行git reflog
并在已删除分支的尖端找到提交的 SHA1,然后只需git checkout [sha]
。一旦你在那个提交,你可以git checkout -b [branchname]
从那里重新创建分支。
感谢 @Cascabel 这个浓缩 / 单线版本。
您可以一步完成:
git checkout -b <branch> <sha>
大部分时间无法访问的提交都在 reflog 中。因此, 首先要尝试的是使用命令git reflog
查看git reflog
(它显示HEAD
的 reflog)。
如果提交是仍然存在的特定分支的一部分,也许更容易使用命令git reflog name-of-my-branch
。它也适用于遥控器,例如,如果您强制推动。
如果您的提交不在您的 reflog 中 (可能是因为没有在 reflog 中写入的第三方工具删除),我通过将我的分支重置为使用类似命令找到的提交的 sha 成功恢复了一个分支(它创建一个包含所有悬空提交的文件):
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 config --global alias.rescue '!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 rescue
要调查已发现的提交,您可以使用一些命令来显示每个提交以查看它们。
要显示提交元数据(作者,创建日期和提交消息):
git cat-file -p 48540dfa438ad8e442b18e57a5a255c0ecad0560
要查看差异:
git log -p 48540dfa438ad8e442b18e57a5a255c0ecad0560
找到提交后,在此提交上创建一个分支:
git branch commit_rescued 48540dfa438ad8e442b18e57a5a255c0ecad0560
如果您想使用 GUI,可以使用 gitk 执行整个操作。
gitk --reflog
这将允许您查看分支的提交历史记录,就好像分支尚未删除一样。现在只需右键单击对分支的最新提交,然后选择菜单选项Create new branch
。