我在本地机器上做了一些更新,将它们推送到远程存储库,现在我试图将更改拉到服务器上,我得到了消息;

error: Your local changes to the following files would be overwritten by merge:
wp-content/w3tc-config/master.php
Please, commit your changes or stash them before you can merge.

所以我跑了,

git checkout -- wp-content/w3tc-config/master.php

再试一次,我得到了同样的信息。我假设w3tc更改了服务器上配置文件中的一些内容。我不关心本地副本或远程副本是否在服务器上(我认为远程副本是最好的),我只是希望能够合并我的其余更改(插件更新)。

什么好主意吗?


当前回答

对我来说,这很有效:

Git重置——很难

然后

Git拉原点<*当前分支>

在那之后

Git checkout <*branch>

其他回答

在我的例子中,我备份然后删除Git抱怨的文件,提交,然后我终于能够签出另一个分支。

然后我替换文件,复制回内容并继续,就像什么都没有发生一样。

在我的NestJS项目中,我在.env文件中遇到了类似的问题。

尝试了很多方法,包括本页上的方法。

最后,在剪贴板上复制。env的内容,删除文件,git拉起工作!

重新创建.env并将内容粘贴回来。

如果有多个文件,只需将它们临时移出git回购目录,然后在拉出更改后将它们移回。

您可以尝试以下方法之一:

变基

对于简单的更改,尝试在它的基础上重新调整,同时拖动更改,例如。

git pull origin master -r

所以它会在取回后把你当前的分支应用到上游的分支上。

这相当于:checkout master, fetch和rebase origin/master git命令。

这是一种潜在危险的操作方式。它重写了历史,这不是一个好兆头,因为你已经出版了那段历史。除非你仔细阅读了git-rebase(1),否则不要使用这个选项。


结帐

如果你不关心你的局部变化,你可以暂时切换到其他分支(强制),然后切换回来,例如。

git checkout origin/master -f
git checkout master -f

重置

如果您不关心您的本地更改,尝试将其重置为HEAD(原始状态),例如。

git reset HEAD --hard

如果上面没有帮助,它可能是你的git规范化文件(.gitattributes)中的规则,所以最好提交它所说的。或者你的文件系统不支持权限,所以你必须在git配置中禁用filemode。

相关:我如何强制“git拉”覆盖本地文件?

这可能是CRLF问题造成的。

参见:为什么我应该使用核心。在Git中为true ?

使用这个来拉并强制更新:

git pull origin master
git checkout origin/master -f

我尝试了第一个答案:得分最高的git stash,但错误消息仍然弹出,然后我找到了这篇文章来提交更改,而不是stash“勉强提交”

错误信息最终消失了:

1:去添加.

2: git commit -m "这是一个额外的提交"

3: git checkout the-other-file-name

然后就成功了。希望这个答案能有所帮助。