Git pull - 在合并之前,请移动或删除它们

100

我正试图在我的服务器上执行git pull origin master,但一直出现以下错误:

请移动或删除它们以便您可以合并。

虽然没有未跟踪的文件,但似乎由于某种原因出现了被忽略的文件问题。

我尝试运行git clean -nd来查看将被删除的内容,它列出了许多在.gitignore中被忽略的文件。

我该如何修复这个问题以便我可以进行pull操作呢?


6
git reset --hard origin/master 帮助解决了这个问题 https://dev59.com/i3NA5IYBdhLWcg3wAI7e?rq=1。在尝试复杂的解决方案之前,人们应该先尝试简单的解决方案。Git... - Rauli Rajande
7个回答

272
我刚刚遇到了同样的问题,并通过以下方法解决了它。首先使用以下命令清除已跟踪的文件:
# caution: it will **delete all untracked files**
git clean -d -f

然后尝试执行git pull origin master
您可以通过输入git clean -help来查看其他git clean选项。

5
无法正常工作,我仍然收到以下错误信息:错误:以下未跟踪的工作树文件将在合并时被删除: logs/recommend.log 请在合并之前将它们移动或删除。 - Stepan Yakovenko
3
这是一项工作。这个解决方案应该被接受为答案。 - Zappy.Mans
如果我想强制合并本地仓库中的传入文件,该怎么办? - Atif Shafi
1
谢谢,这对我有用。我在还原提交之前使用了它。 - kayhanozturk
1
这个答案需要在前面加上一个警告。我执行了这个命令,删除了我目录下很多未跟踪的有用文件,并且无法恢复。 - M.Zhu

38

要删除并清除所有更改,使用命令 git clean -d -f


3
谢谢,这对我有用。需要注意的一点是:它会删除所有未被跟踪的文件,所以如果您有一个包含秘密信息的 .env 文件或其他本地配置,请先备份。 - Steve

33

显然,这些文件是在远程仓库中添加的,无论原始.gitignore文件的内容是什么。

由于这些文件存在于远程仓库中,Git也必须将它们拉到本地工作目录中,因此会抱怨这些文件已经存在。

.gitignore仅用于扫描新添加的文件,与已经添加的文件无关。

因此解决方案是删除工作目录中的文件并拉取最新版本。或者,如果这些文件是错误添加的,则从存储库中删除这些文件是长期的解决方案。

从远程分支中删除文件的简单示例是:

$git checkout <brachWithFiles>
$git rm -r *.extension
$git commit -m "fixin...."
$git push

然后你可以再次尝试使用$git merge


@Brett:看起来问题存在于远程 repo 而不是本地。先把本地的删除,然后拉取最新的版本。接下来删除导致问题的文件,提交并推送。之后这些文件就应该被忽略了。 - Zbynek Vyskovsky - kvr000
@Brett:我指的是你从中获取更新的那个地方,也就是Bitbucket。我假设你会在本地开发仓库上进行上述操作,并将更改推送到Bitbucket。然后你只需在服务器上运行pull命令,由于文件将从Bitbucket仓库中删除,问题也将消失。 - Zbynek Vyskovsky - kvr000
问题在于,它出现问题的文件是仅存在于服务器上的被忽略文件 - 服务器有一些本地不存在的文件夹,因此我将它们添加到了.gitignore中; 所以我不明白为什么Git不能忽略它们 - 它们不在仓库中并且已经被忽略了。 - Brett
@Brett:请再次确认这些文件确实不在仓库中。如果是这种情况,git 实际上不会抱怨,它只会抱怨那些导致冲突的文件,即存在于远程仓库并且在本地文件系统中未被跟踪的文件。 - Zbynek Vyskovsky - kvr000
好的,我发现一些仍在存储库中但被.gitignore忽略的文件。我会清理它们,看看进展如何。 - Brett
显示剩余2条评论

5
如果要删除的文件太多,实际上对我来说就是这种情况。您还可以尝试以下解决方案:
1)获取(fetch)
2)采用某种策略进行合并。例如,以下策略适用于我:
git.exe merge --strategy=ours master

2
我因为文件名区分大小写而出现了这个错误。我所做的是通过运行Git的配置来忽略大小写。
git config core.ignorecase true  

然后再次尝试拉取,这次成功了。

git pull

你可以将 ignorecase 返回为 false

git config core.ignorecase false   

1
git reset --hard

它实际上重置了您本地服务器上的所有更改。


0

如果您遇到以下错误:

  • branch master -> FETCH_HEAD error: The following untracked working tree files would be overwritten by merge: src/dj/abc.html Please move or remove them before you merge. Aborting

请尝试手动删除上述文件(小心)。Git 将从主分支合并此文件。


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