我的一个克隆的存储库是从git fsck获得的
致命:松散对象40bda4e3b79c3d7bf598df31d9e68470f97a3f79(存储在的.git /对象/ 40/bda4e3b79c3d7bf598df31d9e68470f97a3f79)已损坏
我有另一个副本,fsck干净利落.
我试过nuking目录/子目录包含致命的目录/子目录,并重新克隆它.问题还在继续.
我真的不关心任何特定的文件,我只是希望存储库干净地结账.我该怎么办?
注意:远程存储库托管在github上.
这个想法是:
.git当前项目下的当前 git 记录(让我们用“项目 A”表示)。cd进入项目 A 和 git clone 并重置为最后一次提交。cd进入项目 A 并使用git status查看项目 A的状态。应该就像从来没有发生过任何损坏一样。简而言之,制作一个副本以保留您当前的工作区域,并通过替换文件将其与新克隆合并,然后照常处理您的更改。
这是它的实际操作:
首先我看到我有一个损坏(这是因为我昨天强迫我的虚拟机不正常关闭:P):
? domicor@ubuntu ? 〜/点文件?? 掌握 ?? git的状态错误:对象文件的.git /对象/ CD / 593f6db1d5050406e15b9c80d215fd48db39f4是空的错误:对象文件的.git /对象/ CD / 593f6db1d5050406e15b9c80d215fd48db39f4是空的致命:松散对象cd593f6db1d5050406e15b9c80d215fd48db39f4(存储在的.git /对象/ CD / 593f6db1d5050406e15b9c80d215fd48db39f4)已损坏

复制我的dotfiles文件夹,现在删除该.git文件夹。
$ cd ~/dotfiles $ rm -rf .git
然后重新创建一个git repo。
$ git 初始化
添加遥控器。
$ git remote add origin git@git.oschina.net:domicor/dotfiles.git
从远程获取。
$ git 获取
现在重置 HEAD。
$ git reset --hard origin/master
请注意,在我从远程获取数据后,我立即发出了一个git status命令来检查我的 repo 的状态。您可以看到所有文件都未跟踪。命令行提示符的第一部分从我的git init命令到git reset命令是橙色的,表示当我初始化我的 repo 时,git 检测到文件,并且在重置后,所有文件都恢复到 HEAD 的状态,因此出现绿色提示。
设置上游分支:
$ git branch --set-upstream-to=origin/master master
现在dotfiles (copy)手动或通过命令行从备份文件夹(对我来说是)复制文件以替换文件dotfiles夹中的文件。查看状态,应该有变化,就像我的屏幕截图一样:
现在您可以git diff your-filename检查您的更改是否正确应用,您可以添加文件并从现在开始提交。\o/
为了进一步理解它,git VCS 只记录您的更改。当 VCS 损坏时,您的文件仍然安全。当你离开他们时,他们还在那里。因此,您备份文件并从其他地方恢复 git 记录,并且 git 可以将恢复副本与您当前的文件状态进行比较,并了解发生了什么变化,就像它在损坏之前所做的那样。和欢呼\o/
我遇到了这个问题,这个简单的技巧解决了这个问题。
假设您在名为“my-project”且分支为“my-new-feature”的文件夹中遇到此问题,请将存储库克隆到名为“my-project-dummy”的新文件夹并签出到“my-new-feature”
删除“my-project”文件夹中的“.git”文件夹,并将“.git”文件夹从“my-project-dummy”文件夹复制到“my-project”