电脑死后,Git存储库坏了

时间:2013-03-09 23:20:58

标签: git

我的电脑坏了,现在我的一个git存储库坏了。当我试图结账大师时,它告诉我:

warning: ignoring broken ref refs/heads/master.
error: Your local changes to the following files would be overwritten by checkout:
        com.vainolo.jdraw2d.releng.p2/pom.xml
Please, commit your changes or stash them before you can switch branches.
Aborting

当我执行git stash时,我得到:

fatal: bad revision 'HEAD'
fatal: bad revision 'HEAD'
fatal: Needed a single revision
You do not have the initial commit yet

那么......我该怎么办?

更新 输出git reflog

fatal: bad default revision 'HEAD'

不太有希望......输出git fsck

error: Invalid HEAD
Checking object directories: 100% (256/256), done.
error: unable to unpack 59551f96b4e87a1c14293c19eb548ce6fa1f196f header
error: inflateEnd: stream consistency error (no message)
fatal: loose object 59551f96b4e87a1c14293c19eb548ce6fa1f196f (stored in .git/objects/59/551f96b4e87a1c14293c19eb548ce6fa1f196f) is corrupt

18 个答案:

答案 0 :(得分:165)

我设法通过以下方式恢复:

rm .git/refs/remotes/origin/HEAD
git fetch --all

答案 1 :(得分:20)

首先按照Recovering broken git repository中建议的步骤进行操作:

  • 检查.git/refs是否仍包含任何有用的内容
  • 检查git reflog并确认.git/logs/refs/heads/master的内容或您上次使用的任何分支
  • 可能使用git fsck--unreachable
  • 运行--lost-found

这有望让你弄清楚master引用应该是什么,以便你可以恢复它(即将正确的SHA1转换为.git/refs/heads/master)。

如果该提交中包含的任何对象确实已损坏,则无法恢复您的HEAD提交。假设您的工作树和/或索引是完整的,您可以尝试git reset --soft(或失败git reset)前一次提交,然后重新执行提交。避免任何改变工作树的操作。 git checkout -fgit reset --hard

答案 2 :(得分:10)

我在Windows 8.1的蓝屏死机后遇到了类似的问题

我在这个位置有一个文件......

C:\www\<project>\.git\refs\remotes\origin\<problem-branch>

它是空的,而此文件夹中的其他分支文件内部有长字符串。

NB我没有任何更改/提交

  • 我备份了<problem-branch>文件
  • 删除了文件
  • git fetch --all再次获得分行

然后标签自动完成再次开始工作

答案 3 :(得分:5)

如果没有很多修改过的文件,我认为解决这个问题的方法是:

  1. 备份您在repo中修改的文件
  2. 删除现有的回购
  3. 从服务器重新克隆
  4. 将步骤1中的文件粘贴到repo,然后git commit -a

答案 4 :(得分:2)

我设法通过删除git \ refs \ heads目录中的主文件来解决这个问题

答案 5 :(得分:1)

我知道这是一个太晚的回复,但我收到了这个错误,因为我没有origin/head。您可以通过运行git branch -r找到这个。如果您没有看到origin/head指向远程来源,则可以通过运行git remote set-head origin {{your branch name}}进行设置。

现在再次运行git branch -r,您应该会看到以下内容: origin/HEAD -> origin/develop

我希望这可以帮助其他遇到此问题的人。

答案 6 :(得分:1)

在计算出冻结和崩溃后,我的git分支被损坏,并显示以下消息: git fatal: your current branch appears to be broken。我无能为力。

git fsck提到分支有error: Invalid HEAD之后。 refs/heads/<branch>有一个invalid sha1 pointer

按照此处的选项,我在记事本++编辑器中打开了.git/refs/heads/<branch>,每个sha1字符都是NUL

幸运的是我只需要将分支重置为远程状态,那就是在bitbucket repo上。我从远程仓库的尖端抓住sha1并复制到.git/refs/heads/<branch>保存它,然后做了git reset --hard HEAD,一切恢复正常。

答案 7 :(得分:0)

遇到类似问题(计算机紧急重启,大概是由于 Sourcetree 使用 Windows 错误检查器的内存泄漏/蓝屏死机 re: KB4586853?)我从 git fsck --full 得到以下信息:

error: refs/heads/merge/FEED-318: invalid sha1 pointer 0000000000000000000000000000000000000000
error: bad ref for .git/logs/HEAD
error: bad ref for .git/logs/refs/heads/<my-branch-name/with-subfolder>

不确定是否是巧合,但我的分支被命名为类似 merge/TICKET-NO 的名称。

在盲目地尝试了许多这些解决方案之后我找到了上一次提交的 SHA(来自 .git/logs/HEAD)并且只是 --force 检查了它,问题基本解决了。我所有的历史记录都回来了,能够gitk看到漂亮的图表等等。只丢失了最后一次尝试提交的更改。

答案 8 :(得分:0)

如果你记得你的头指向哪个分支,那么只需转到 github/bitbucket 上的那个分支并复制该分支上最新提交的哈希并将其粘贴到文件 .git\refs\remotes\origin\HEAD 然后一样 git 添加。 git commit -m "" git push

答案 9 :(得分:0)

只需添加我的案例:

git push
<块引用>

错误:无法锁定引用'refs/heads/master':无法解析 参考'refs/heads/master':参考损坏

我试过了:

git clone <path>

但是得到了:

You appear to have cloned an empty repository.

我在服务器存储库上检查了这个文件:

<块引用>

refs/heads/master

该文件有一个很长的空白字符字符串。

我用这个命令检查了最后一个提交标识符(幸运的是它仍然有效):

git log origin/master -5

然后我将最后一个提交标识符复制到服务器文件refs/heads/master

有风险,但有效。到目前为止,克隆、推和拉都可以。

答案 10 :(得分:0)

因为我知道我的本地分支是最新的,快速解决方法是简单地将头部 SHA-1 复制到远程


我可能的原因:电源故障。

我收到了这个错误,但我还是能够推送更改。

我检查了文件 .git/refs/remotes/<branch>,它包含所有 null 字符。

但是,.git/refs/heads/<branch> 具有正确的 SHA1。

答案 11 :(得分:0)

我的计算机崩溃了两次,结果是我的git存储库在本地损坏。我无法撤消更改,它要求设置远程原点,但在gitKraken中不起作用。

在命令提示符下,出现此错误 enter image description here

我知道我的引用已损坏,需要修复。我要做的是,git bash(在SourceTree中,单击“终端”)。然后像这样导航到引用文件夹

cd .git
cd refs
cd remotes
cd origin

那里将有一个文件名master,使用ls查看目录中的内容。然后只需使用删除它 rm master

bam,损坏的文件不见了。现在,如果您发出git branch命令-a,它将输出此

$ git branch -a
* master
  remotes/origin/master (this in red color -scary :) )

然后发出此命令,它将修复您的引用

$ git remote set-head origin master

总结起来,如果您想拉遥控器,它应该显示已修复的空白遥控器名称。

enter image description here

答案 12 :(得分:0)

原谅我,如果我想跟着别人再说一遍(我还没有阅读所有反馈)。 在我看来,解决问题的最简单方法是复制没有.git和.idea的项目,清理它,从git克隆,删除除上述目录外的所有内容,然后使用.git和.idea将先前的副本粘贴到新创建的仓库中。希望它确实有意义。

答案 13 :(得分:0)

由于无法锁定引用错误,我无法检出我的主分支。我最后删除: .git/refs/remotes/origin/HEAD .git/refs/remotes/origin/master

并调用此git命令:

git fetch --all

答案 14 :(得分:0)

我很傻到忘记推动,我的计算机在执行提交时崩溃了。 我可以通过打开来恢复除了最后一次提交之外的一切 的.git /日志/参/头/

此文件包含对分支的所有提交(使用其SHA),我要恢复的是:

  • 备份临时文件夹的最新更改
  • 转向“干净的石板”
    • git checkout master
    • git reset --hard
  • 结帐日志中的倒数第二次提交
  • 从这个独立的头部创建一个分支
  • PUSH
  • 恢复最新的更改
  • 再次提交

所以,即使你犯了一个愚蠢的错误,你也不会被git的一整天工作立即收回:)

答案 15 :(得分:0)

当Android Studio突然终止(由于计算机断电)时,我遇到了同样的问题。

我通过将C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\heads\master文件的内容复制到我的C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\remotes\origin\master文件来解决这个问题。

(之前,我还在Android Studio中启用了“强制推送”选项,但我认为这不是必要的步骤。)

注意:

我通过比较C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\目录(包含子目录)中文件的内容与另一个健康项目中相应文件的内容来找到此解决方案 - 例如{{1 }}

您可能有一个不同的文件已损坏,但通过与另一个健康项目进行比较,您应该能够快速发现错误。

如果你没有另外一个配置了git的健康项目,那么创建一个简单的项目可能与创建破坏的项目的方式相同,因此可以进行调查,比较和修复等。

PS - 我的错误消息(已编辑)为:C:\Users\myusername\AndroidStudioProjects\MyHealthyApp\.git\

答案 16 :(得分:0)

检查MSWindows是否创建了兼顾git的desktop.ini文件?它对我有用。一旦我将它们全部删除到.git目录的子文件夹中,那么它就可以了。

答案 17 :(得分:0)

I had the same issue but no luck, couldn't figure out the problem. I took my repo to a side, re-cloned the one from server and tried to merge between them. Of course it shown a lot of files not related to my branch, but help to isolate the files required.