我删除了我依据的分支。我当时在想解决方案可能是先结帐到master,然后获取远程分支并继续工作,但是我遇到了这个错误,
notice: HEAD points to an unborn branch
该如何解决?
答案 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创建一个新分支。