【问题标题】:How to absolutely obliterate a branch with a detached head in git?如何在 git 中完全消除带有分离头的分支?
【发布时间】:2018-01-14 07:28:10
【问题描述】:

我处于恐慌状态。

我不小心损坏了几根树枝并丢失了一些工作,但到目前为止我仍有希望。有一个单独的头包含大约 10 个小时的工作。

我损坏了另一个需要 12 小时的工作来尝试合并/恢复 git 分支以仅作为分离头信息的分支。

基本上我需要/想要的是获取当前分离的头部,并强制分支成为分离头部的字符,不合并,不检查。唯一重要的是分支完全变成了独立的头,而 git 没有试图对此保持聪明。

然后我需要将这个被删除的分支与 master 合并。

请帮忙,10 个小时的工作是相当多的。

【问题讨论】:

    标签: git github merge


    【解决方案1】:

    首先要做的是复制整个git repo/project; 那么你可以在安全备份的同时尝试任何东西。

    如果您有权访问gitk,则可以使用gitk --all 获得良好的概览 树中的所有引用、本地、远程和隐藏提交,这可能 显示一些假定丢失的引用。

    git checkout -b <new branch>
    

    将在当前提交或分离状态下创建一个新分支。

    然后您可以git add -A 确定所有(未忽略的)文件都被添加,然后 在这个新分支上进行紧急提交,以确保您不会丢失任何未提交的内容 离开它时的文件。

    git reflog 是你的朋友。它可以帮助您回到以前的状态 否则会丢失。 (先备份。)

    要将这个恢复的分离 HEAD 分支放到 master 上,你可以使用 挑选、变基或合并。

    git rebase --onto master recovered^ recovered
    

    例如,将在 master 的基础上更改分支 recovered 中的单个提交。

    【讨论】:

    • 只要在 git 中,你就没有丢失任何东西。
    • 在所有的 git 魔法下,有时我们会忘记它只是一个我们可以复制的目录。一旦我们意识到这一点,在临时副本中执行深层魔法(reflogfilter-branch)通常会更容易,直到我们做对为止。只是不要保留副本,以后多个历史会变得混乱! ;)
    【解决方案2】:

    首先做一个 git status,确认没有未跟踪的文件(并且 HEAD 已分离)

    然后从那里创建一个新分支:

    git checkout -b tmp
    

    最后,您可以将任何分支重置为它:

    git checkout -B aBranch tmp
    

    如果你的工作(在这个分支或另一个也损坏的)被提交,你应该能够在git reflog找到这两个分支。

    不要忘记检查您的 IDE:它可以为您的文件保留自己的本地历史记录。 (例如,Visual Studio Code with this plugin

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 2012-03-01
      • 2017-07-28
      • 2010-10-03
      • 1970-01-01
      • 2012-05-01
      相关资源
      最近更新 更多