Git 意外删除了回购所基于的分支机构,如何修复?

Git 意外删除了回购所基于的分支机构,如何修复?,git,Git,我已经删除了我重新设置基础的分支。我认为解决方案可能是签出到master,然后获取远程分支并继续工作,但我得到了这个错误 notice: HEAD points to an unborn branch 如何修复此问题?出于这种原因,Git通常不允许删除您所在的分支 这里最基本的问题是分支名称包含提交哈希ID。也就是说,根据您的评论,您这样做了: git checkout feature/branch_1 将名称功能/分支\u 1放入特殊名称头部。名称本身,即功能/branch_1,包含分支提

我已经删除了我重新设置基础的分支。我认为解决方案可能是签出到master,然后获取远程分支并继续工作,但我得到了这个错误

notice: HEAD points to an unborn branch
如何修复此问题?

出于这种原因,Git通常不允许删除您所在的分支

这里最基本的问题是分支名称包含提交哈希ID。也就是说,根据您的评论,您这样做了:

git checkout feature/branch_1
将名称
功能/分支\u 1
放入特殊名称
头部
。名称本身,即
功能/branch_1
,包含分支提示的40个字符的散列ID,因此名称记住了实际的提交散列

然后你跑:

git branch -d feature/branch_1
Git应该说不,你不能那样做。(在使用
git worktree add
时,出现了一些错误,您可以通过各种方式解决问题,但是
git branch
本身应该在这里说不。)成功后,您将得到:

  • 头部
    包含
    特征/分支1
  • 但是
    功能/分支1
    不存在
修复它的方法是重新创建名称
feature/branch_1
,同时将正确的提交哈希ID放入其中。问题是没有内存应该保存哪个提交散列:该散列ID存储在名称
feature/branch_1
下,不再保存

那么,您需要的是查找此哈希ID的其他方法。一种方法是,如果有另一个名称也存储了正确的哈希ID,您可以从该另一个名称读取哈希ID:

git branch feature/branch_1 origin/feature/branch_1
比如说。然而,如果没有这样的名字,那就行不通了

幸运的是,
HEAD
有一个reflog,并且
HEAD
reflog存储您访问过的提交的原始提交哈希。不幸的是,在这种状态下,Git似乎拒绝使用它:

$ git reflog HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
以及:

然而,这确实起到了关键作用:

$ tail -1 .git/logs/HEAD | awk '{print $2}'
b5101f929789889c2e536d915698f58d5c5c6b7a

因此,在这种特殊情况下,您可以使用这种特殊的技巧(否则无论如何都不会发生)。

是的,您应该能够执行git reflog并在删除的分支的顶端找到提交的SHA1,然后只需执行git checkout[sha]。一旦您完成了提交,就可以使用git checkout-b[branchname]从那里重新创建分支

您可以一步完成:

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

这是用您给出的名称为SHA1创建一个新分支。

您能提供一个命令列表及其输出,使您进入这种状态吗?问题是我使用的是功能/branch\u 1,我使用的是git branch-d功能/branch\u 1。我现在做的是:因为我只有一个提交不是远程(简单的一个)的一部分,所以我使用git获取originfeature/branch_1并再次添加小提交。但我在想,如果不是这样的话,我该如何在本地恢复已删除的分支failing@user3616359使用此命令也可以查看“git reflog”查看reflog并遵循另一条命令问题是git reflog出现故障是的,正如我上面提到的,如果
HEAD
引用了不存在的分支,
git reflog HEAD
将失败。但我还演示了如何使用reflog恢复哈希ID。
git checkout -b <branch> <sha>