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

fis*_*rds 20 git github

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

致命:松散对象40bda4e3b79c3d7bf598df31d9e68470f97a3f79(存储在的.git /对象/ 40/bda4e3b79c3d7bf598df31d9e68470f97a3f79)已损坏

我有另一个副本,fsck干净利落.

我试过nuking目录/子目录包含致命的目录/子目录,并重新克隆它.问题还在继续.

我真的不关心任何特定的文件,我只是希望存储库干净地结账.我该怎么办?

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

Set*_*son 26

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


Hus*_*ion 7

这个想法是:

  1. 首先删除驻留在.git当前项目下的当前 git 记录(让我们用“项目 A”表示)。
  2. 复制您当前的项目,我们将副本表示为“项目 B”。
  3. 现在cd进入项目 A 和 git clone 并重置为最后一次提交。
  4. 复制项目 B 中的所有文件并替换项目 A 中的文件。
  5. 现在cd进入项目 A 并使用git status查看项目 A的状态。应该就像从来没有发生过任何损坏一样。

简而言之,制作一个副本以保留您当前的工作区域,并通过替换文件将其与新克隆合并,然后照常处理您的更改。

这是它的实际操作:

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

    ? domicor@ubuntu ? 〜/点文件?? 掌握 ?? git的状态错误:对象文件的.git /对象/ CD / 593f6db1d5050406e15b9c80d215fd48db39f4是空的错误:对象文件的.git /对象/ CD / 593f6db1d5050406e15b9c80d215fd48db39f4是空的致命:松散对象cd593f6db1d5050406e15b9c80d215fd48db39f4(存储在的.git /对象/ CD / 593f6db1d5050406e15b9c80d215fd48db39f4)已损坏 损坏

  2. 复制我的dotfiles文件夹,现在删除该.git文件夹。

    $ cd ~/dotfiles $ rm -rf .git

    点文件

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

    $ git 初始化

  4. 添加遥控器。

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

  5. 从远程获取。

    $ git 获取

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

  6. 现在重置 HEAD。

    $ git reset --hard origin/master

    这是镜头: 重启

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

  7. 设置上游分支:

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

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

    最终的

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

为了进一步理解它,git VCS 只记录您的更改。当 VCS 损坏时,您的文件仍然安全。当你离开他们时,他们还在那里。因此,您备份文件并从其他地方恢复 git 记录,并且 git 可以将恢复副本与您当前的文件状态进行比较,并了解发生了什么变化,就像它在损坏之前所做的那样。和欢呼\o/

  • 顺便说一句 - 你在这里使用什么样的 git-aware bash-prompt?编辑:找到了,Agnoster for ZSH (https://github.com/agnoster/agnoster-zsh-theme) (2认同)

Ram*_*ami 7

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

步骤1

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

第2步

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

Tadaaa 你现在可以走了。

  • 这就像一个魅力。您不需要像其他答案所建议的那样移动存储库文件。我什至在存储库中进行了未提交的更改,并且无需执行任何其他操作即可将它们恢复。 (3认同)