错误:结帐将覆盖以下未跟踪的工作树文件

时间:2014-08-19 20:52:36

标签: git git-pull git-status

当我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 个答案:

答案 0 :(得分:29)

由于文件名的大小写更改,也可能发生这种情况。我遇到了同样的问题,这就是为我解决的问题。

git config core.ignorecase true

适用于Mac或PC。

替代解决方案:The following untracked working tree files would be overwritten by checkout

答案 1 :(得分: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>(来自提交C)的修订out在您的工作树中,其中已存在同名的未跟踪文件。该未跟踪文件的内容可能很有价值;您可能不希望该文件被其他版本覆盖。因此,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>

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

答案 2 :(得分:5)

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

git clean  -d  -fx ""

答案 3 :(得分:0)

对我来说,这是文件名大小写不匹配的一个版本,如@MikeHall所述。 但是,为了解决此问题,我实际上需要使用“错误”文件名将最近的提交修改为“正确”大小写。然后,在那之后,我得以成功地克服了那些有问题的提交。