【问题标题】:Git undo local branch deleteGit 撤消本地分支删除
【发布时间】:2011-04-30 20:49:39
【问题描述】:

我刚刚删除了错误的分支,并使用git branch -D branchName 进行了一些我需要的实验性更改。

如何恢复分支?

【问题讨论】:

  • 很高兴知道我不是唯一这样做的跛脚(并且忘记定期推送到远程副本)

标签: git branch git-branch


【解决方案1】:

如果您使用 Jetbrains IDE(Goland、phpstorm 等)的 GUI 删除了分支

git windows(left-down corner of IDE) -> console tab -> 现在您可以查看 IDE 执行命令的日志,并从该日志中找到分支名称和 SHA1

【讨论】:

    【解决方案2】:

    如果您通过Source Tree 删除了一个分支,您可以通过转到View -> Show Command History 轻松找到已删除分支的SHA1。

    它应该有下一个格式:

    Deleting branch ...
    ...
    Deleted branch %NAME% (was %SHA1%)
    ...
    

    那就按照原来的答案去做吧。

    git branch branchName <sha1>

    【讨论】:

      【解决方案3】:

      如果你知道分支的最后一个SHA1,可以试试

      git branch branchName <SHA1>
      

      您可以使用git reflog 找到SHA1,在解决方案--defect 链接-- 中有描述。

      【讨论】:

        【解决方案4】:

        这对我有用:

        git fsck --full --no-reflogs --unreachable --lost-found
        git show d6e883ff45be514397dcb641c5a914f40b938c86
        git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
        

        【讨论】:

          【解决方案5】:

          按照以下步骤操作:

          1:输入:

          git reflog show 
          

          这将显示所有 Commit 历史记录,您需要选择具有要返回的最后一次提交的 sha-1

          2:使用您选择的 Sha-1 ID 创建一个分支名称,例如:8c87714

          git branch your-branch-name 8c87714
          

          【讨论】:

          • 非常感谢。这对我有用。我的 2 个月的工作丢失了。该解决方案帮助恢复了这些文件。
          【解决方案6】:

          如果你刚刚删除了分支,你会在终端中看到类似这样的内容:

          Deleted branch branch_name(was e562d13)
          
          • 其中 e562d13 是唯一 ID(也称为“SHA”或“哈希”),您可以使用它恢复已删除的分支。

          要恢复分支,请使用:

          git checkout -b <branch_name> <sha>
          

          例如

          git checkout -b branch_name e562d13 
          

          【讨论】:

            【解决方案7】:

            谢谢,这行得通。

            git 分支 new_branch_name sha1

            git checkout new_branch_name

            //可以在我的旧分支中看到我旧签入的文件

            【讨论】:

            • 这是not a forum,请为有用的答案投票而不是转发。
            【解决方案8】:

            您可以使用git reflog 查找分支最后一次提交的 SHA1。从那时起,您可以使用

            重新创建一个分支
            git branch branchName <sha1>
            

            编辑: 正如@seagullJS 所说,branch -D 命令告诉您 sha1,因此如果您还没有关闭终端,它变得非常容易。例如,这会删除然后立即恢复名为 master2 的分支:

            user@MY-PC /C/MyRepo (master)
            $ git branch -D master2
            Deleted branch master2 (was 130d7ba).    <-- This is the SHA1 we need to restore it!
            
            user@MY-PC /C/MyRepo (master)
            $ git branch master2 130d7ba
            

            【讨论】:

            • Git 会告诉你删除分支时的 SHA1 是什么,所以如果你只是删除它,它可能只是命令行中的几行。
            • 如果服务器上有这个分支,也可以使用git branch branchName origin/branchName
            • 此外,我最终使用 git cherry-pick 将提交移动到分支
            【解决方案9】:

            如果你还没有推送删除,你可以这样做:

            $ git checkout deletedBranchName
            

            【讨论】:

            • 这个答案让 Git Extensions 对“你尝试推送的分支似乎是这个遥控器的新分支”闭嘴了。非常感谢。
            【解决方案10】:

            首先:备份整个目录,包括 .git 目录。

            第二种:可以使用git fsck --lost-found获取丢失提交的ID。

            第三:变基或合并到丢失的提交。

            第四:在使用 -D 或 --force 与 git 之前总是三思而后行 :)

            您也可以read this good discussion 了解如何从此类错误中恢复。

            编辑:顺便说一句,不要运行 git gc(或让它自己运行 - 即不要运行 git fetch 或类似的东西),否则你可能会永远失去你的提交。

            【讨论】:

            • 是的,这就是我们使用 git 的原因,以避免随身携带所有东西。您提交的每项操作仍然可供您使用。
            • 您为我节省了 30 小时的工作时间,谢谢!不小心删除了一个只有本地提交的分支,这是我一周前做的,没有推送。
            • 这很好用!我还能够在树中可视化丢失的提交:git fsck --lost-found | awk '/commit/{print $3}' | xargs gitk &amp;
            猜你喜欢
            • 2020-04-12
            • 2012-05-23
            • 2018-11-12
            • 2021-08-22
            • 2012-03-17
            • 2016-10-06
            • 1970-01-01
            • 2014-06-13
            相关资源
            最近更新 更多