当我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会说我删除了这个文件,而在其他消息中,它说它没有被跟踪。怎么可能同时没有跟踪和跟踪?
答案 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所述。 但是,为了解决此问题,我实际上需要使用“错误”文件名将最近的提交修改为“正确”大小写。然后,在那之后,我得以成功地克服了那些有问题的提交。