git中的分支已断开,致命:您当前的分支似乎已断开
我的情况如下:git中的分支已断开,致命:您当前的分支似乎已断开,git,git-branch,fatal-error,git-log,blue-screen-of-death,Git,Git Branch,Fatal Error,Git Log,Blue Screen Of Death,我的情况如下: 我在一家分行工作 将新提交推送到远程服务器 切换回主分支 但在键入git checkout master命令后,我的计算机突然遇到了一个意外的强制关闭。启动计算机后,我检查了当前分支机构的状态,因此我将每个文件都标记为新文件 现在,我被困在这一点上,在执行git log命令之后,我得到了一个错误 $ git log fatal: your current branch appears to be broken 如何解决此问题并恢复我的分支 我正在使用Windows7和Git
- 我在一家分行工作
- 将新提交推送到远程服务器
- 切换回主分支李>
git log
命令之后,我得到了一个错误
$ git log
fatal: your current branch appears to be broken
如何解决此问题并恢复我的分支
我正在使用Windows7和GitBash的最新版本
编辑:我不想删除此分支。
我在Windows7上遇到了类似的问题。在我的例子中,
\.git\refs\heads
下的当前分支文件(请参见/git/HEAD
)已损坏
我在.git\logs\refs\heads
上找到了断开的当前分支的哈希代码,该代码具有相同的分支名称
我通过记事本打开文件(
.git\logs\refs\heads\xxx
)并将第四个数字(散列码)复制到(.git\refs\heads\xxx
)您的分支名称现在可能包含一些特殊字符或类似的内容
您应该转到签出的根目录(即.git/
目录),然后
.git/packed refs
;如果看到带有分支名称的行,请将其删除.git/refs/heads中查找以您的分支命名的文件;如果你
看到一个,删除它
.git\refs\heads目录中的文件是您的分支。 检查那些文件。它们应该只包含一个提交对象SHA-1哈希。这个散列是您的最新SHA-1密钥,同时也是您的头 复制SHA-1键并键入
$ git cat-file -t 5917fefd485f655ab369d4e9eeda3c157c03f514
commit
$ git cat-file -p 5917fefd485f655ab369d4e9eeda3c157c03f514
tree b75cab3c54b780075b312be3e878b389a2baf904
parent 8235189aa22169295243d295fb1cc2ff2f8f7cd5
author Ilker Cat <ilker.cat@blabla.com> 1495136738 +0200
committer Ilker Cat <ilker.cat@blabal.com> 1495136738 +0200
$git cat文件-t 5917FEFD485F655AB369D4E9EEDA3C15C03F514
犯罪
$git cat文件-p 5917fefd485f655ab369d4e9eeda3c157c03f514
树B75CAB3C54B780075B312BE878B389A2BAF904
父级8235189aa22169295243d295fb1cc2ff2f8f7cd5
作者Ilker类别1495136738+0200
提交人Ilker类别1495136738+0200
第二个输出是提交对象基本上包含的内容。尝试检查主分支中.git\refs\heads\master下的提交对象及其树和父SHA-1键是否未损坏
甚至主分支文件中的一些撇号也会导致“断开的分支”。它必须只包含最新提交对象SHA-1哈希,而不包含其他内容。有时也可能由于文件权限问题而出现此问题,请检查您是否对存储库下的所有文件都具有适当权限。也有同样的问题。
删除.git\refs\heads\修复了我的问题。如果尝试将分支重命名为命名空间(或文件夹)分支,可能会遇到此错误 如果发生这种情况,请转到目录
.git/logs/refs/heads/
和.git/refs/heads/
,您将看到您的分支现在是一个文件夹,其中包含一个文件
在这两个文件夹中,将文件移出到文件夹级别,签出该分支,删除现在为空的文件夹,现在您应该能够执行
git checkout-b/
而不会出错,或者git branch-M/
我通过将repo克隆到一个新文件夹,然后替换更改的文件来解决这个问题。这似乎不是一个好的解决方案,但它是安全的 在5月份的情况下,使用记事本打开在找到的以我的分支名称命名的文件后,
为空。所以我把它删掉了
并运行以获取最新的提交
git reflog
4404dd7头@{0}:提交:更新自述文件
然后我就跑
git reset --hard 4404dd7
HEAD现在位于4404dd7更新自述文件
布兰奇回来了。
注意
这可能会分散你的注意力。因此,您可能需要稍后修复它们
4404dd7是我在该分支中的最新提交,我不知道这是否是正确的解决方案,但它对我起了作用。我也有同样的问题。我刚刚删除了
.git/refs/heads
中的所有文件,
然后我试图编辑我的一个文件,以便git接受提交。然后,当我推送文件时,出现以下错误:
10:47推送被拒绝
推送已取消,因为更新期间存在冲突。
检查冲突是否已正确解决,然后再次调用推送
但是,我在合并文件时接受了rebase选项,解决了这个问题,没有冲突。好的,对于这个问题,我发现, 如果您返回并克隆您的repo,您所要做的只是从新repo复制.git文件夹,并替换旧repo中的.git文件夹
剩下的就是历史:运行git add。然后git提交并推送。文件的内容是什么
.git/HEAD
?它是否指向有效的分支名称?分支名称是否指向有效的提交散列?是的,正确,但在本例中,我是唯一的用户;拥有所有的权利!。git文件夹隐藏在我的箱子里,请自行查看。谢谢!我发现检查提交散列也很有用,以查看它是否是我想使用git checkout
还原的状态(在将其复制到git/refs/heads/xxx
之前)。谢谢,它起到了作用。我将上一个提交哈希表.git\logs\refs\heads\xxx复制到.git\refs\heads\xxx。日志中有两列哈希代码,第二列的最后一个条目是我的最后一次提交。非常感谢,这很有效。总有一天,我会仔细研究git的内部结构,它似乎只把我的文件当作“所有文件都是新的”来对待,在这样做之后:\真是太感谢你了。差点心脏病发作!我希望我能理解这为什么有效,但它确实有效。(我没有尝试重命名我的分支,我的电脑在拉操作中崩溃了)