我已经删除了我重新建立基础的分支。我认为解决方案可能是 checkout 到 master,然后获取远程分支并继续工作,但我收到此错误,
notice: HEAD points to an unborn branch
如何解决这个问题?
最佳答案
由于这种原因,Git 通常不会允许您删除所在的分支。
这里最基本的问题是分支名称包含提交哈希 ID。也就是说,根据您的评论,您这样做了:
git checkout feature/branch_1
将名称 feature/branch_1
放入特殊名称 HEAD
中。名称本身(即 feature/branch_1
)包含分支提示的 40 个字符的哈希 ID,以便名称记住实际的提交哈希。
然后你跑了:
git branch -d feature/branch_1
Git 应该直接说不,你不能那样做。 (使用 git worktree add 时存在一些错误,并且有多种方法可能会给自己带来问题,但 gitbranch 本身应该是这样的 在这里直接说“不”。)成功后,您将得到:
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
所以你可以在这种特殊情况下诉诸这个特殊的技巧(否则无论如何都不会发生)。
关于git - 不小心删除了repo所基于的分支,如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55224809/