无法检出git分支 - 需要提交更改,但没有更改。

4
我遇到了一个问题,我想要checkout一个分支,但是由于以下原因,我无法进行:

你的本地更改会被checkout覆盖: lib/file.php 在切换分支之前,请提交您的更改或将其存储。放弃

好吧,于是我运行git status,然后得到:

在当前分支上没有要提交的内容,工作目录干净

我需要编辑.git/info/exclude以排除lib/file.php,因为该文件在我的特定机器上引起问题。 但是当我导航到exclude时,我不再看到文件列表中列出的文件。我检查了当前活动的所有三个分支,但是我在我的exclude文件中没有看到lib/file.php。

这里发生了什么?

不是重复 - 回答/链接建议作者实际上从未提交过文件。 我理解这个概念。 这是另一个问题。


你是在同一个目录下运行这些命令吗? - Joe Phillips
是的,全部在项目根目录。 - kawnah
好的...那么git处于一种奇怪的状态,因为您的忽略文件阻止了git status“看到”更改,但checkout仍然“看到”存储库中的文件将覆盖本地文件。查看该链接。应该可以解决您的问题。 - JDB
@kawnah,请将 git reflog 的输出添加到您的问题中,这样就可以轻松地跟踪您执行的命令了。 - danglingpointer
显示剩余6条评论
2个回答

5

目前你所在的分支中,文件lib/file.php不在git中,而是在你的文件夹中。你想要切换到的分支中,该文件在git中存在。如果git切换到该分支,你现在拥有的当前文件将永远丢失。

git的错误信息有点令人困惑。它应该告诉你在切换到该分支之前要么删除lib/file.php,要么1. 添加该文件,2. 提交它,3. 切换到其他分支。


好的,我现在明白了。 - kawnah
但是我试图添加,却没有添加成功,因为它已经被git监视了? - kawnah
这里不考虑删除,因为我不想将删除操作推送到远程。 - kawnah
文件可以在一个分支中被监视,但在另一个分支中不能被监视。看起来它没有在您当前的分支中被监视,但在您想要切换到的分支中被监视。添加应该可以工作,但如果文件被忽略了,您可能需要强制添加。删除只是在文件系统中删除,而不是使用git rm。 - tkruse

0
在当前分支上没有要提交的内容,工作目录干净。这是因为对于 .git/info/exclude 文件所做的更改不能被提交,因为它是您的特定设置。因此它会显示没有要提交的内容。但是,如果您修改了 .gitignore 文件,则适用于使用此存储库的任何人。请阅读有关 .git/info/exclude 的更多信息。

我需要这样做而不是使用.gitignore,因为有问题的文件只会破坏我的构建,而不会影响其他人。所以如果我使用.gitignore,它将在每个人的版本中被忽略,因此如果其他人对其进行了提交,就会导致冲突。只有我需要忽略它。我知道这是一个混乱的情况,不是理想的,但事实就是如此。感谢您的回答。 - kawnah
但更令人困惑的是,现在.git/info/exclude没有列出该文件。那么为什么会表现出这种方式呢? - kawnah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接