46

我的 git 存储库发生了一件奇怪的事情。当我尝试在 tortoisegit 窗口中提交某些内容时,我会收到来自项目的所有文件。我无法恢复它们,当我从服务器拉出时,我收到fatal: No such ref: HEADfatal: Cannot lock the ref 'HEAD'. 我所有的当地分支机构都不见了。有没有办法解决这个问题?

这不是第一次提交或其他什么。这件事突然发生了。

编辑:

git branch -a说:Failed to resolve HEAD as a valid ref

git status打印所有标记为新文件的项目文件。

我更改了存储库文件夹名称一段时间,当我将其更改回来时,情况不正确。

4

4 回答 4

67

你已经失去了你的HEAD,所以你需要重新创建它。最简单的做法是这样。

echo ref: refs/heads/master >.git/HEAD

现在您应该能够运行其他 git 命令并查看您所在的位置。

(尽管从理论上讲,您可以尝试执行git symbolic-ref HEAD refs/heads/master较新的 git 版本,.git除非它已经包含 a ,否则它不会将 a 识别为 git 存储库,HEAD因此这将无法创建新版本。)

于 2011-01-31T08:29:43.513 回答
7

HEAD通常是对特定分支的引用;在您的情况下,分支指针似乎丢失了,因此无法解析 HEAD 引用。

您可以使用git fsck --lost-found扫描对象缓存以查找无法访问的对象;具体来说,您对提交感兴趣,然后可以在下面找到.git/lost-found/commit/;这些是指向您的分支的指针,您需要做的就是找出哪个是哪个,然后使用git branch.

于 2011-01-31T07:58:27.927 回答
6

我认为这个答案可能对某人有所帮助。我几乎解决了这个问题。首先,我所做的是,就像查尔斯·贝利(Charles Bailey)写的那样,使用

echo ref: refs/heads/master >.git/HEAD

然后我的分支变成了master。我提交了更改并能够切换到我的主分支。问题是我无法使用我当地的任何分支机构。特别是我想在分支 812 上工作。所以我发现最后一次提交到分支 812(提交时创建消息非常有帮助;))并切换到它。接下来,我根据切换到的分支创建了分支 812。不幸的是,一些文件丢失了。幸运的是,我把它们放在了我在“echo”之前复制的损坏的仓库中

于 2011-01-31T09:29:40.240 回答
2

对我来说,问题是在 Mac OS X 上设置了“uchg”或“uappnd”标志,无论权限如何,都会锁定一些 git 文件。我像这样重置了chflags,它为我解决了这个问题:

sudo chflags -R 0000 .
于 2012-04-24T03:15:44.067 回答