如何在Git中恢复已删除的分支?

如何在Git中恢复已删除的分支?,git,Git,我正在尝试使用Git进行软件开发。我发现如果我在Git中删除一个分支,我的代码可能会永远丢失。这让我很惊讶。我认为作为一个版本控制系统,它应该能够让我做任何事情(甚至是愚蠢的事情),而不必担心损害我的工作 以下步骤是我所做的: 初始化Git存储库 向存储库提交几个更改 将当前工作目录切换/签出到第一次提交 删除主分支 然后我失去了所有的工作,我简直不敢相信我所看到的。是真的吗?如果我在编码时喝醉了。我可能会丢失Git中的代码 问题是如何回滚删除分支的操作 或者,如何在Git中获取所有历史记录,甚

我正在尝试使用Git进行软件开发。我发现如果我在Git中删除一个分支,我的代码可能会永远丢失。这让我很惊讶。我认为作为一个版本控制系统,它应该能够让我做任何事情(甚至是愚蠢的事情),而不必担心损害我的工作

以下步骤是我所做的:

  • 初始化Git存储库
  • 向存储库提交几个更改
  • 将当前工作目录切换/签出到第一次提交
  • 删除主分支
  • 然后我失去了所有的工作,我简直不敢相信我所看到的。是真的吗?如果我在编码时喝醉了。我可能会丢失Git中的代码
  • 问题是如何回滚删除分支的操作


    或者,如何在Git中获取所有历史记录,甚至是日志中已消失的内容?

    为了避免问题的发生,请在评论中给出建议:

    另一个提示:只使用
    git branch-d
    ,不要使用
    git branch-d

    如果您将要删除一些可能会使您失去工作的内容,您将收到警告,然后您可以在使用
    -D

    (或者,您可以从
    gitk
    中删除,以便真正看到要删除的内容。)

    删除分支。
    分支必须完全合并到其上游分支中,或者如果没有使用
    --track
    --set upstream
    设置上游,则必须完全合并到
    HEAD


    但是,如果您确实“丢失”了您的工作,请参阅以下内容之一(如评论中所示):

    :

    返回列表 Git重新开始救援 2010年9月9日-由Chris Sloan撰写| 0评论»

    前几天,我正在使用我们当前的分支策略为Real Travel开发一个功能,因为我们的每个版本都是一个单独的分支。
    我不确定这是否是由于熬夜导致睡眠不足的原因,但在将分支合并回主分支以供发布之前,我意外地删除了分支的本地和远程副本
    在经历了一个快速的震惊和失去工作时间的想法之后,我平静下来,依靠我的Git知识。
    阅读您的完整提交历史记录:

    有两种方法可以读取git中的提交历史记录。第一种方式显示提交的详细信息列表,而另一种方式显示对当前
    头的登录引用

    使用
    reflog
    命令,我能够准确地找到对已删除分支的最后一次引用的位置。
    reflog
    的示例输出可能如下所示:

    现在,reflog不会准确显示分支被删除的位置,但是如果您记得上次提交到该分支并有足够详细的消息,那么应该很容易找到和恢复

    通过检查要创建新分支的头,可以直接恢复分支

    也可以使用散列签出新分支

    很简单,现在我可以继续在删除之前合并分支了


    如果您承诺它仍然存在,请检查git reflogI,我希望即使您喝醉了,您也不会再次删除您的主分支!另一个提示:只使用
    git branch-d
    ,不要使用
    git branch-d
    。如果您将要删除一些可能会使您失去工作的内容,您将收到警告,然后您可以在使用
    -D
    之前花一点时间思考。(或者,您可以从
    gitk
    中删除,这样您就可以真正看到您要删除的内容。)可能的副本只是版本控制系统的另一个示例,它不是备份系统,也不是备份系统(反之亦然)。如果您碰巧记得分支上的最后一次提交是什么,这非常好,但我只是意外地删除了多个本地分支,我不记得最后一次提交是什么,所以我一直在仔细筛选391个悬空提交,试图找出哪个分支在哪个提交上:/如果你想知道我是如何删除多个分支的,原来
    git-fetch--prune-upstream+refs/heads/*:refs/heads/*
    有点危险:/我通过对
    git-reflog
    进行文本搜索,找到我仍然拥有的已删除分支的名称,从而相当容易地解决了我的多分支删除问题……所以“保持冷静,git-reflog!”)实际上,我有一个被删除的分支从未签出到我的工作副本中(它是用
    git branch
    创建的),因此它不会显示在默认的
    git reflog
    中,并且执行
    git reflog
    会导致“致命:不明确的参数”,我想这是因为分支引用在创建后从未移动过。是否有一些简单的方法可以通过我不知道的方法来恢复此分支,或者我必须通过悬空/不可访问的提交进行搜索?@Cupcake实际上不确定,但我认为
    @{-1}
    修订引用在这里不起作用(),所以。。。这可能是一个很好的问题。拯救了我的一周,谢谢!我想我在与VisualStudio插件同步开发时丢失了它
    -d
    
    // log of detailed commits by users
    $> git log
    
    // reference log compared to the current HEAD
    $> git reflog
    
    c7f3d98 HEAD@{0}: commit: Merged in some code
    f5716c8 HEAD@{1}: pull : Fast-forward
    d93c27b HEAD@{2}: commit: Added some items to project
    ...
    
    $> git checkout -b my_new_branch HEAD@{5}
    
    $> git checkout -b my_new_branch d93c27b