如何删除“致命:松散的物体”?

时间:2012-07-22 00:58:35

标签: git github

我的一个克隆存储库是从git fsck

获取的
  

致命:松散的物体40bda4e3b79c3d7bf598df31d9e68470f97a3f79(存储在.git / objects / 40 / bda4e3b79c3d7bf598df31d9e68470f97a3f79中)已损坏

我还有另一份fsck干净利落的副本。

我已经尝试过nuking目录/子目录,其中包含致命的目录/子目录 重新开始。问题还在继续。

我真的不关心任何特定文件,我只想要存储库 干净利落地结帐。我该怎么办?

注意:远程存储库托管在github上。

7 个答案:

答案 0 :(得分:25)

简单回答:将旧回购搬走,然后退回。如果你想保留旧仓库中的东西,有办法获得它们,但首先得到一个好的回购。

答案 1 :(得分:4)

首先,您可以检查文件系统是否有错误:fsck -y

然后,检查git存储库:git fsck

答案 2 :(得分:4)

这个想法是:

  1. 首先删除您当前项目下.git内的当前git记录(让我们用“项目A”表示)。
  2. 制作当前项目的副本,我们将副本表示为“项目B”。
  3. 现在cd进入项目A并进行git clone并重置为最后一次提交。
  4. 复制项目B中的所有文件,并替换项目A中的文件。
  5. 现在cd进入项目A并使用git status查看项目A的状态。应该就好像没有发生任何腐败一样。
  6. 简而言之,制作一份副本以保留当前的工作区域,并通过替换文件将其与新克隆合并,然后正常处理您的更改。

    这是实际行动:

    1. 首先我看到我有一个腐败(这是因为我强迫我的虚拟机昨天正常关闭:P):

      ✘domicor @ ubuntu~/ dotfilesmaster●gitstatus 错误:目标文件.git / objects / cd / 593f6db1d5050406e15b9c80d215fd48db39f4为空 错误:目标文件.git / objects / cd / 593f6db1d5050406e15b9c80d215fd48db39f4为空 致命:松散的对象cd593f6db1d5050406e15b9c80d215fd48db39f4(存储在.git / objects / cd / 593f6db1d5050406e15b9c80d215fd48db39f4中)已损坏 corrupted

    2. 制作dotfiles文件夹的副本,然后删除.git文件夹。

      $ cd~ / dotfiles $ rm -rf .git

      dotfiles

    3. 然后重新创建一个git repo。

      $ git init

    4. 添加遥控器。

      $ git remote add origin git@git.oschina.net:domicor / dotfiles.git

    5. 从遥控器获取。

      $ git fetch

      以下是上述命令的屏幕截图:rm-clone-fetch

    6. 现在重置HEAD。

      $ git reset --hard origin / master

      这是镜头:reset

      请注意,在我从远程获取后,我发出git status命令来检查我的回购状态。您可以看到所有文件都未跟踪。从我的git init命令到git reset命令,命令行提示符的第一部分是橙色,表示当我初始化我的repo时,git检测到文件并在重置后,所有文件都恢复到状态HEAD因此是绿色提示。

    7. 设置上游分支:

      $ git branch --set-upstream-to = origin / master master

    8. 现在手动或通过命令行从备份文件夹(对我来说是dotfiles (copy))复制文件,以替换dotfiles文件夹中的文件。检查状态,应该像我的屏幕截图一样进行更改:

      final

    9. 现在您可以git diff your-filename检查您的更改是否已正确应用,并且您可以从现在开始添加文件和提交。 \ O /

    10. 为了理解它,git VCS只会记录您的更改。当VCS损坏时,您的文件仍然是安全的。当你离开它们时它们仍在那里。所以你备份你的文件并从其他地方恢复git记录,git可以将恢复副本与你当前的文件状态进行比较,并就腐败之前发生的变化提出想法。并欢呼\ o /

答案 3 :(得分:1)

我遇到了这个问题,这个简单的技巧解决了这个问题。

步骤1

假设您在分支为“ my-new-feature”的名为“ my-project”的文件夹中遇到此问题,将存储库克隆到名为“ my-project-dummy”的新文件夹中,并签出为“ my-new” -功能”

步骤2

删除“ my-project”文件夹中的“ .git”文件夹,并将“ .git”文件夹从“ my-project-dummy”文件夹复制到“ my-project”

Tadaaa,你现在可以走了。

答案 4 :(得分:0)

对另一个分支执行git checkout,您将获得已更改文件的列表,只需提交它们并进入分支。 如果您这样做,问题将得到解决,下次当您进行一些更改时git status应该有效。

答案 5 :(得分:0)

你应该重新创建一个仓库:

  • 删除 .git 文件夹
  • 将所有内容从工作目录复制到备份目录
  • git 初始化
  • git remote add origin https://github.com/USERNAME/REPONAME.git
  • git pull
  • git checkout -b 备份
  • git 添加。
  • git commit -m "添加备份"
  • git 结帐大师
  • 你又回来了(主分支)

答案 6 :(得分:-4)

最简单的答案是" rm -rf .git ..." http://www.bazhukov.net/2015/02/git-corrupt-loose-object/