Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修复损坏的Git存储库 P>我的Git储存库在电源断电后重新启动后损坏了,现在我无法修复它(我正处于最后一次电源故障时的一些文件的中间):_Git_Corruption - Fatal编程技术网

修复损坏的Git存储库 P>我的Git储存库在电源断电后重新启动后损坏了,现在我无法修复它(我正处于最后一次电源故障时的一些文件的中间):

修复损坏的Git存储库 P>我的Git储存库在电源断电后重新启动后损坏了,现在我无法修复它(我正处于最后一次电源故障时的一些文件的中间):,git,corruption,Git,Corruption,所以,正如你所看到的,我目前的分支机构相当糟糕,我似乎无法修复它。我可以尝试什么来修复此问题?尝试对存储库进行备份,然后运行git reset--hard HEAD@{1}返回到以前的HEAD,看看是否有效。它可能只是当前的磁头,已损坏 (如果您还没有在磁盘上运行过,fsck。对于类似情况,我的解决方案是将.git/refs/heads/My working branch中受损对象的散列替换为以前提交的散列(可以在.git/logs/HEAD中找到)。对于我来说,我使用非苹果SSD(不推荐使用)

所以,正如你所看到的,我目前的分支机构相当糟糕,我似乎无法修复它。我可以尝试什么来修复此问题?

尝试对存储库进行备份,然后运行
git reset--hard HEAD@{1}
返回到以前的
HEAD
,看看是否有效。它可能只是当前的
磁头
,已损坏


(如果您还没有在磁盘上运行过,
fsck

对于类似情况,我的解决方案是将
.git/refs/heads/My working branch
中受损对象的散列替换为以前提交的散列(可以在
.git/logs/HEAD
中找到)。

对于我来说,我使用非苹果SSD(不推荐使用)在OS X中启用了TRIM,显然在我的引导盘上造成了各种损坏。因此,腐败的犯罪在历史上很深

我不太关心修复我的存储库,除了我有几个本地分支,它们太过实验性,以至于不需要推到远程存储库,我想挽救这些分支中的工作

理论上,由于这是一个本地存储库,我觉得Git应该能够使用origin恢复/修复自身。为什么这不可能

无论如何,我偶然发现了。不幸的是,将存储库克隆到
。/repo_copy
,然后将其用作本地远程,导致以下错误:

! git push --force local_remote HEAD
fatal: failed to read object e0a9dffddeeca96dbaa275636f8e8f5d4866e0ed: Invalid argument
error: failed to push some refs to '/Users/steve/Dev/repo_copy'
因此,我从一个空的存储库开始,然后将分支推到存储库中,效果很好。因此,对于我的任何本地分支机构,其
git log
不是以以下内容结尾:

....
    Fixing cukes
fatal: failed to read object e0a9dffddeeca96dbaa275636f8e8f5d4866e0ed: Invalid argument
我只是简单地检查一下,然后做
gitpush--force local\u remote HEAD
。我做的最后一件事是:

! cd ~/Dev/repo_copy
! git remote add origin git@github.com:sdhull/my_repo.git  # real remote

然后,我进入了git config-e,设置了我的主分支,并在没有任何损失的情况下恢复运行

这件事刚刚发生在我身上。我将存储库重新合并到一个新文件夹中,并手动将最新更改移到上面。技术含量低,但每次都有效。希望您能记得上次的更改。

我能够从以下位置恢复我的存储库:

zsh(broken)% git log master
error: object file .git/objects/7f/cab8648a989d9bb3f5246e6be7220395493395 is empty
error: object file .git/objects/7f/cab8648a989d9bb3f5246e6be7220395493395 is empty
fatal: loose object 7fcab8648a989d9bb3f5246e6be7220395493395 (stored in .git/objects/7f/cab8648a989d9bb3f5246e6be7220395493395) is corrupt
zsh(broken)% cat .git/refs/heads/master
7fcab8648a989d9bb3f5246e6be7220395493395
e311726c4eb970f4d4f504ad86248d322855018f da9c14d03e4849394087b61ff6272399937f7cce Nikolay Orliuk <virkony@gmail.com> 1379583764 +0300    commit: plan: timings
创建新的空存储库,从断开的

zsh(broken)% mkdir ../recover && cd ../recover && git init
Initialized empty Git repository in /home/nikolay/talks/y/recover/.git/
zsh(recover)% git fetch ../broken master
remote: Counting objects: 44, done.
remote: Compressing objects: 100% (44/44), done.
remote: Total 44 (delta 20), reused 0 (delta 0)
Unpacking objects: 100% (44/44), done.
From ../broken
 * branch            master     -> FETCH_HEAD
zsh(recover)% git reset --hard FETCH_HEAD
HEAD is now at da9c14d plan: timings
zsh% git fsck
Checking object directories: 100% (256/256), done.
要恢复正在进行中的更改,请执行以下操作:

zsh(recover)% rm -rf * && cp -a ../broken/* ./
zsh(recover)% git add -u && git commit -m 'prepare for publishing'

我按照以下说明进行操作:


这对我来说很有效。

对我来说最简单的解决方案是:你应该
git克隆一个新文件夹中的
,然后将干净的新文件夹/.git替换到旧文件夹(断开的文件夹)。它对我很有效

git clone ...(remote) new_folder
mv old_folder/.git  old_folder/.git_old
cp -R new_folder/.git  old_folder/

另一种对我有效的方法是使用以下命令将Git头和索引重置为其以前的状态:

git reset --keep
我还尝试了以下命令,但它们对我无效,但对您可能有效:

git reset --mixed
git fsck --full
git gc --auto
git prune --expire now
git reflog --all

我也遇到了同样的问题,并使用

  • cp myrepo myrepo.bak
  • cd myrepo
  • git repair--force
    (首先在不使用
    force的情况下尝试)
此操作成功后,树被设置回最后一次工作提交


然后,我将myrepo myrepo.bak进行了
合并,以将已损坏存储库的工作树中的更改应用到固定存储库中。

当我更改分支时,Windows显示了蓝屏。已启动备份,所有文件都已损坏,git无法识别存储库

我是如何修复的:

  • 我从远程克隆了一个新副本
  • 将.git/index和.git/HEAD文件复制到损坏的.git repo
  • git最终认可了回购协议,所以我做了一个艰难的结帐
  • 成功

  • 注意:如果您有未提交的更改,此方法将覆盖这些更改。

    $git reset--hard HEAD@{1}签出文件:100%(5724/5724),完成。致命错误:无法读取对象3d18855708b0f127d40c13c679559d7679228b69:无效参数否,相同的内容:($git reflog fatal:无法读取对象3D18855708B0F127D40C13C79559D7679228B69:参数无效可能文件系统fsck在引导时出错,我看到有关清理孤立索引节点的消息。您应该能够请参阅
    .git/logs/HEAD
    下的reflog。如果搜索错误的对象,您应该能够看到可能丢失的历史记录,并在损坏的对象之前进行备份。(请注意,文件是附加的,因此最新的
    HEAD
    将位于末尾。)esto me ayudo a salir del problema.graciasis此服务器repo?是否存在可用于恢复的本地克隆/repo?这是我的本地git repo…我在另一台机器上有一个克隆,可用于恢复所有内容(可能会丢失一些提交),但如果可能的话,我宁愿修复此repo…值得一提的是,工作文件夹的内容可能仍然是可恢复的。执行
    git diff>diff.patch
    ,然后您可以像这样使用它来修补新克隆:
    git patch-p1
    电源故障也可以做到这一点。坏的HDD/SSD也是如此。几乎所有的答案都假设可以简化你从某个不可损坏的远程源重新克隆。问题是……如果你是源,并且你已经损坏了怎么办?对。因此,这里:
    git repair
    是一个程序,它将运行
    git fsck
    ,并努力修复它遇到的任何问题。它似乎很有能力,尽管你可能最终不得不复制(如果你可以!)备份中的对象(你有备份,对吗?),它应该可以挽救一切,让你完成真正的工作,而不是许多自动化的任务,从而为你节省大量时间。没有从属关系等仍然会使存储库处于损坏状态,但这
    git clone ...(remote) new_folder
    mv old_folder/.git  old_folder/.git_old
    cp -R new_folder/.git  old_folder/
    
    git reset --keep
    
    git reset --mixed
    git fsck --full
    git gc --auto
    git prune --expire now
    git reflog --all