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


当前回答

最热门的解决方案实际上比要求的要多:

git checkout <sha>
git checkout -b <branch>

or

git checkout -b <branch> <sha>

将您移动到新的分支,以及您可能忘记提交的所有最近更改。这可能不是你的意图,尤其是在失去分支后处于“恐慌模式”时。

一个更干净(更简单)的解决方案似乎是一行(在使用git-relog找到<sha>之后):

git branch <branch> <sha>

现在,当前分支和未提交的更改都不受影响。相反,只会创建一个新分支,直到<sha>。

如果这不是提示,它仍然有效,并且您得到了一个较短的分支,那么您可以使用新的<sha>和新的分支名称重试,直到正确为止。

最后,您可以将成功恢复的分支重命名为其名称或其他名称:

git branch -m <restored branch> <final branch>

不用说,成功的关键是找到正确的承诺<sha>,所以明智地命名你的承诺:)

其他回答

大的是

如果您正在使用GIT遵循以下简单步骤https://confluence.atlassian.com/bbkb/how-to-restore-a-deleted-branch-765757540.html

如果您正在使用smartgit并已经推送该分支转到原点,找到该分支,然后右键单击,然后签出

添加到tfe答案:git源代码的contrib/区域(在git.git存储库中)中还有git-resurrect.sh脚本,这可能会对您有所帮助。

git restore<name>尝试查找分支提示的痕迹调用<name>,并尝试恢复它。当前,reflog是搜索签出消息,并使用-r合并消息。具有-m和-t,将扫描所有ref的历史记录,以便将<name>合并到other/将<other>合并到<name>中(分别)提交主题很慢,但可以让你重新提起别人的话题分支。

如果您正在使用VSCode。。。并且你在删除分支之前的某个时间点将其与服务器同步。。。

注意,gitbranchdelete只删除本地副本,而不是服务器上的副本。首先,在Git面板(左侧工具栏上的Git图标)中,查看分支,看看分支是否仍在“origin/your_branch_name”下。如果是这样的话,只需选择它,您就可以取回代码(建议您立即在其他地方复制/粘贴/保存代码)。

如果没有看到“origin/your_branch_name”,请安装GitLens扩展。这允许您在服务器存储库中直观地四处查看,并找到同步到服务器的副本。如果您有多个存储库,请注意,为了使存储库显示在GitLens中,可能需要从所需的存储库中至少打开一个文件。然后:

打开GitLens面板扩展存储库您应该看到类别列表:分支/参与者/远程/Stashes等

您应该在“Branches”或“Remotes->Origins”下找到YourLostTreasure。希望您会看到一个具有所需名称的分支-如果展开它,您应该会看到在该分支中更改的文件。双击文件名以打开它们,然后立即备份该代码。

如果你没有立即看到你丢失的分支,四处看看,如果你发现了有希望的东西,立即打开它并获取代码。我不得不四处寻找,直到找到TheGoldenBranch,但即便如此,代码还是丢失了最后一次或两次保存(可能是因为我在尝试a-Branch-Merge-buncy-incidentaly-clicking-Branch-Delete之前未能同步到服务器)。我的搜索被不必要地拉长了,因为当我第一次找到分支时,我并不完全确定名称是否正确,所以一直在寻找,花了一些时间才重新找到第一个分支。(因此,将卡普姆(Carpum),然后继续寻找。)

恢复已删除分支的一般问题的一个非常常见的子问题是在合并后恢复功能分支,然后删除它,这是常见的做法。

由于这篇SO文章涵盖了,如果已成功合并,您始终可以恢复已删除的分支。这是因为分支只是一个指向提交的花哨指针,因为您已经合并,所以提交仍然存在。合并提交将列出合并的两个(或多个)分支的头部提交的哈希值。例如:

        git show master
        commit 849675951d41497e7b07d34096ebf36dc713221 (HEAD -> master)
        Merge: fc1c9ce 97f8a60
        Author: Me
        Date:   Sun Jan 9 16:14:24 2022 +0100

            Merge branch 'feature'

因此,您可以通过执行git checkout-b feature97f8a60来恢复delete“feature”分支,无需任何reflog内容。

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

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

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