协慌网

登录 贡献 社区

在 Git 中删除后可以恢复分支吗?

如果我运行git branch -d XYZ ,有没有办法恢复分支?有没有办法回去,好像我没有运行删除分支命令?

答案

是的,您应该能够执行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