这是我的第一个问题,我试图在论坛和谷歌上搜索答案,但遇到了障碍。
所以我把我的git文件保存在谷歌硬盘上。在创建了5个提交之后,我从git log——oneline 得到如下输出
5c1bd8f (HEAD -> master) 5th commit - robots.txt
ca656ac 4th commit - robots.txt
3850e6c 3rd commit - robots.txt
bd5b39f 2nd commit - robots.txt
6f3ee36 1st commit - robots.txt
a177016 All files committed
然后,我通过键入gitcheckout bd5b39f切换到第二次提交来创建一个新分支。
然而,当我想回到master时,通过键入gitcheckout-master,我得到了以下输出。
$ git checkout master
fatal: bad object refs/desktop.ini
我在谷歌上搜索了一下,找到了这个解决方案:Git/Google Drive错误引用
一旦我意识到发生了什么,清理就相当简单了:
- 暂停Google Drive以防止进一步干扰
- 删除存储库中所有隐藏的desktop.ini文件。我通过命令行窗口,但应该可以通过Windows资源管理器选择正确
- 压缩Git数据库
- 恢复Google Drive
我曾试图使用Windows资源管理器和命令行删除desktop.ini文件,但最终得到了这个输出。
$ git checkout master
fatal: bad object refs/desktop.ini
D desktop.ini
我不理解步骤3-压缩Git数据库。
我还查看了stackoverflow的这个链接,它很相似,但不相同:致命坏对象
$ git gc
error: bad ref for .git/logs/refs/heads/desktop.ini
error: bad ref for .git/logs/refs/desktop.ini
fatal: bad object refs/desktop.ini
fatal: failed to run repack
如有任何帮助,不胜感激。
好的。我想我知道如何解决这个问题,但我不知道背后的理论,所以如果有人能强调这个理论,我将不胜感激。
很明显,当我输入时,我扩展了提交
git checkout <commithash>
不是一个分支。
在有了一个分离的HEAD之后,我试图输入一个新的分支:
git checkout -b newbranch
从那里,我可以向主人结账。
提交后的日志输出
$ git log --oneline
44f1480 (HEAD) 6th commit
cf8add8 test2
72e8617 test1
c12d36f robots.txt - 2nd A commit
57d8a08 robots.txt - 2nd commit
ed9b73f robots.txt - 1st commit
08ab2a3 All files Committed
git checkout-b newbranch 后的日志输出
$ git log --oneline
44f1480 (HEAD -> newbranch) 6th commit
cf8add8 test2
72e8617 test1
c12d36f robots.txt - 2nd A commit
57d8a08 robots.txt - 2nd commit
ed9b73f robots.txt - 1st commit
08ab2a3 All files Committed
注意44f1480(HEAD->newbranch(。不确定这是否是解决问题的正确方法,但它对我有效。
我最近在VS Code中查看Git Graph扩展时遇到了这个问题。我发现这与错误结账无关,所以我想在这里为其他人添加我的解决方案。
首先,从Google Drive中删除所有git存储库。使用GitHub或其他工具进行备份。
然后从文件夹和所有子文件夹中删除所有desktop.ini文件;
- 以管理员身份运行CMD
- 使用
cd
导航到坏文件所在的文件夹 - 删除所有";desktop.ini";使用
del desktop.ini /A:H /S
的文件夹和所有子文件夹中的文件 - 重新加载git图形扩展,错误应该已经消失
Git不喜欢Windows在Google Drive中创建的大量无用的desktop.ini
文件。
到目前为止,我找到的最好的解决方案是在项目文件夹中搜索desktop.ini
,将它们全部选中并删除。然后您可以毫无问题地重新运行git命令。
我在每天开始运行git pull
时都会这样做,每次删除300多个。