26

当我这样做时git status,它说nothing to commit, working directory clean

然后我做git pull --rebase了,它说:

First, rewinding head to replay your work on top of it...
error: The following untracked working tree files would be overwritten by checkout:
    includes/resources/moduledata/12/_Fr4_02_Invention_IPA_SR_la-Fête.pdf
Please move or remove them before you can switch branches.
Aborting
could not detach HEAD

执行时出现类似错误git pull origin master

 * branch            master     -> FETCH_HEAD
error: The following untracked working tree files would be overwritten by merge:
    includes/resources/moduledata/12/_Fr4_02_Invention_IPA_SR_la-Fête.pdf
Please move or remove them before you can merge.
Aborting

我的.gitignore文件:

→ cat .gitignore 
.htaccess
bower_components/

这个文件一直在出现,当我从文件系统中删除它时,git 会说我删除了这个文件,而在其他消息中,它说它是未跟踪的。怎么可能同时不被追踪和被追踪?

4

4 回答 4

37

这也可能由于文件名的大小写更改而发生。我有同样的问题,这就是为我解决的问题。

git config core.ignorecase true

适用于 Mac 或 PC。

替代解决方案: 以下未跟踪的工作树文件将被结帐覆盖

于 2015-05-13T00:41:44.247 回答
15

如果没有完整的回购图,接下来的内容更多的是猜测,但它可以解释这种情况。假设您的历史记录如下:

A -- C [origin/master]
  \ 
   B [HEAD, master]

你写:

这个文件一直在出现,当我从文件系统中删除它时,git 会说我删除了这个文件,而在其他消息中,它说它是未跟踪的。

我猜你可能跑了

git rm --cached <file-in-question>

并在 commit 中提交了删除B;因此,该文件不再在您的本地存储库中被跟踪,但它仍然存在于您的工作树中。

与此同时,上游分支收到C了您的一位合作者的提交,其中<file-in-question>没有从版本控制中删除你试图影响什么

git pull --rebase

是这样的:

 A -- C [origin/master]
       \ 
        B' [HEAD, master]

然而,正如消息所说,

[...] 未跟踪的工作树 [文件] 将被结帐覆盖

实际上,倒回提交C(以便B在其之上重播)将导致<file-in-question>(来自 commit C)的修订在您的工作树中被检出,其中已经存在同名的未跟踪文件。该未跟踪文件的内容可能很有价值;您可能不希望该文件被另一个版本覆盖。因此,Git 停下来告诉你出了什么问题。

编辑:这是一个重现这种情况的小例子......

cd ~/Desktop
mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "add README"

# simulate a remote branch moving ahead by one commit
# (that doesn't remove the README)
git checkout -b origin_master
printf "This is a README.\n" > README.md
git add README.md
git commit -m "add description in README"

# remove the README and create a new commit on master
git checkout master
git rm --cached README.md
git commit -m "remove README"

# simulate an attempt to rebase master to its "upstream" branch, origin_master
git rebase --onto origin_master master

最后一个命令喷出以下内容:

First, rewinding head to replay your work on top of it...
error: The following untracked working tree files would be overwritten by checkout:
    README.md
Please move or remove them before you can switch branches.
Aborting
could not detach HEAD

我建议你跑

git fetch
git log --stat origin/master..master -- <file-in-question>

检查是否发生了类似的事情。

于 2014-08-19T22:18:51.043 回答
7

删除所有未跟踪的文件(小心):

git clean  -d  -fx ""
于 2016-09-29T08:37:21.760 回答
0

对我来说,这是@MikeHall提到的文件名大小写不匹配的一个版本。但为了修复它,我实际上需要将最近提交的带有“坏”文件名的提交修改为“正确”大小写。然后在那之后,我能够成功地超越那个有问题的提交。

于 2020-07-16T21:42:55.040 回答