我有一个git文件夹,它有两个分支,master
和working
。
由于我无法解释的原因,当我运行git branch
命令时,我得到三个分支:
desktop.ini
master
working
working
分支是最新的(重置后),并且具有我想要的内容。
desktop.ini
分支不应该存在。我跑的时候
git branch -d desktop.ini
它表示它不存在且无法删除。它也无法结账。 Git仓库中的每个文件夹中都有一个desktop.ini
文件,因为它是存储仓库的Google云端硬盘文件夹。
然而,主要问题是我无法再访问master
分支。每次我尝试
git checkout master
我回来了
fatal: reference is not a tree: master.
如果我尝试删除它,我会
error: couldn't look up commit object for refs/heads/master
手动检查此文件确实存在于正确的目录中,并且其中有一个头。
我还尝试创建一个新的master
分支,但是被告知一个名为" master"已经存在。最后,运行git log
提供了最新的提交,然后是
error: could not read c7d68...blah blah
fatal: failed to traverse parents of commit aed8af.....
有没有简单的方法来复苏master
分支?
更新:将头部从工作分支复制到主分支,我现在可以再次访问主分支。但是每git status
次返回
error: could not read c7d68.....
error: could not read c7d68.....
fatal: Failed to traverse parents of commit aed8......
我需要采取行动纠正这个问题吗?
答案 0 :(得分:1)
我今天早上遇到了这个问题。在我的情况下,我在Windows主机上运行Ubuntu VM。 Ubuntu VM用于开发,但我正在使用的文件实际上位于从主机操作系统共享的目录中。 Windows是,因为它不会这样做,将desktop.ini文件添加到共享目录中的所有目录...包括.git目录及其所有子目录。 Git在不期望第三方操纵内容的地方看到这些文件;所以当我执行“git branch”时,我得到的列表与提问者的列表非常相似。
这里的关键是这些显然不是真正的分支。它们只是Git期望能够对目录内容进行简单枚举的地方的文件,以便找到存在的分支。当你尝试做一些更实质的事情,比如删除这个新的desktop.ini分支时,它会失败,因为它不是真正的分支。
我通过删除Windows中添加到.git目录结构的所有desktop.ini文件来解决这个问题。一旦我这样做了,幻影分支就消失了,一切正常(因为git-flow在.git / refs / release中将文件作为当前版本的进展分支),因此它在我的情况下搞砸了git-flow。如果我继续在Windows主机文件系统中托管这些文件,我确实希望这些文件能够回来...可能有一种更永久的方法来阻止这种情况,但我还没有到达那里。