如果我运行gitbranch-d XYZ,是否有方法恢复该分支?有没有办法像我没有运行delete branch命令一样返回?


当前回答

谢谢大家。

我的问题是我删除了GitLab(远程)和GIT(本地)上的分支。

但不知怎么的,我得到了我的承诺,就像这样:

首先,我得到了最后一次提交(SHA)

git log --graph --decorate $(git rev-list -g --all)

我简单地签出了上一个SHA

git checkout <SHA>

然后我通过键入

git switch -c <branch-name> 

然后我拿回了我的承诺我又把树枝推了一遍

谢天谢地。

ps:不知为什么(SHA)是一个提交代码

其他回答

如果您想使用GUI,可以使用gitk执行整个操作。

gitk --reflog

这将允许您查看分支的提交历史,就像该分支未被删除一样。现在只需右键单击分支的最近提交,然后选择菜单选项“创建新分支”。

确保在本地执行所有这些操作,并在推送到Bitbucket云之前确认您的回购处于所需状态。克隆当前的回购协议,并首先测试这些解决方案可能也是一个好主意。

如果您刚刚删除了分支,您将在终端中看到类似的内容:

    Deleted branch <your-branch> (was <sha>)

2.要恢复分支,请使用:

    git checkout -b <branch> <sha>

如果你不知道头顶上的“sha”,你可以:

使用以下方法在已删除分支的末端查找提交的“sha”:

    git reflog

要恢复分支,请使用:

    git checkout -b <branch> <sha>

如果您的提交不在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

2.然后可以使用以下选项之一显示每个提交:

    git log -p <commit>
    git cat-file -p <commit>

如果您使用的是Git扩展

虽然很旧,但当您在google恢复已删除的分支时,此线程是列表的顶部。我使用的是git扩展而不是命令行,所以我不熟悉这些命令,但reflog命令给了我一个线索,所以我在这里发布了我的git扩展解决方案,供其他使用git扩展的人阅读。

转到工具栏上的视图下拉列表选择Show reflog references

您删除的分支现在应该可以查看和选择,只需单击它并将其签出即可。

根据我的理解,如果要删除的分支可以由另一个分支访问,您可以使用

git branch -d [branch]

而且你的工作没有丢失。请记住,分支不是快照,而是指向快照的指针。所以当你删除一个分支时,你就删除了一个指针。

如果删除另一个分支无法访问的分支,您甚至不会丢失工作。当然,这不会像检查提交哈希那样简单,但你仍然可以做到。这就是为什么Git无法删除使用-d无法访问的分支的原因。相反,您必须使用

git branch -D [branch]

这是Scott Chacon关于Git的必看视频的一部分。查看第58:00分钟,当他谈到分支以及如何删除分支时。

GitHub的Scott Chacon介绍Git

如果删除了分支并忘记了它的提交id,可以执行以下命令:

git log --graph --decorate $(git rev-list -g --all)

之后,您将能够看到所有提交。然后,您可以对这个id执行git签出,并在这个提交下创建一个新的分支。