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

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 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拉”覆盖本地文件?

在拉之前要求提交

git stash git pull pull origin << branch >

如有需要:

Git stash应用

丢弃局部更改 使用git重置——很难

如果只有一个文件在本地更新,并且您想要丢弃该文件中的更改,那么您可以执行以下操作——

// Pull latest activities-page.tsx from remote and discard local changes.
git checkout activities-page.tsx  
//Pull latest branch
git pull origin master

警告:这将删除未跟踪的文件,所以它不是这个问题的一个很好的答案。

以我为例,我不想保留这些文件,所以这对我来说很有效:

Git 2.11及更新版本:

git clean  -d  -fx .

较旧的 Git:

git clean  -d  -fx ""

参考:http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

-x意味着被忽略的文件以及git不知道的文件也会被删除。 -d表示除未跟踪的文件外,还删除未跟踪的目录。 -f命令用于强制运行。