意外删除了基于哪个仓库的分支,如何解决?

时间:2019-03-18 15:30:03

标签: git

我删除了我依据的分支。我当时在想解决方案可能是先结帐到master,然后获取远程分支并继续工作,但是我遇到了这个错误,

notice: HEAD points to an unborn branch

该如何解决?

2 个答案:

答案 0 :(得分:3)

由于这种原因,Git通常不会 删除您所在的分支。

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

git checkout feature/branch_1

,将名称feature/branch_1放入特殊名称HEAD中。名称本身,即feature/branch_1包含分支提示的40个字符的哈希ID,以便 name 记住实际的提交哈希。

然后您运行:

git branch -d feature/branch_1

Git刚才应该说不,你可能不这样做。 (使用git worktree add时会出现一些错误,并且有多种方法可以使自己陷入困境,但是git branch本身是应该的意思,在这里只说不。)成功之后,您将剩下:

  • HEAD包含feature/branch_1
  • 但是feature/branch_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.

和:

$ git rev-parse HEAD@{0}
HEAD@{0}
fatal: ambiguous argument 'HEAD@{0}': unknown revision or path not in the working tree.

但是,这可以解决问题:

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

因此您可以在这种特殊情况下诉诸于这种特殊技巧(否则,这种情况就永远不会发生)。

答案 1 :(得分:0)

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

您可以一步完成:

git checkout -b <branch> <sha>

这将使用您提供的名称为该SHA1创建一个新分支。