git - 不小心删除了 repo 所基于的分支,如何修复?
问题描述
我已经删除了我重新建立的分支。我在想解决方案可能是结帐到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
,并且有多种方式可以给自己造成问题,但git branch
它本身应该在这里说不。)当这成功时,你会得到:
HEAD
包含feature/branch_1
- 但
feature/branch_1
不存在。
修复它的方法是重新创建名称feature/branch_1
,同时将正确的提交哈希 ID 放入其中。问题是它没有记忆它应该持有哪个提交哈希:该哈希 ID存储在name 下,现在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
所以你可以在这种特殊情况下使用这个特殊的技巧(否则无论如何都不应该发生)。
推荐阅读
- typescript - TSLint - 删除装饰器上的空格
- javascript - 如何将 nano.uuid 添加到从数据库读取的承诺链中?
- python - 为什么我的代码打印列表中的所有名称,而不仅仅是播放器 1:名称?
- postgis - 将 ply 转换为 postgis,脚本有效,但卷无效
- wordpress - Woocommerce - 不显示可变价格范围
- python - 使用正则表达式仅匹配特定的特殊字符
- typescript - 用于 node_modules 中的分型的 Intellisense
- sequelize.js - 在创建后的续集中添加响应“val”:“CURRENT_TIMESTAMP”时间实例(2019-03-22 09:56:38)
- python - Python:转置数据框,结果不完整
- python - 在没有互联网连接的机器上创建虚拟环境