如何解决git说“提交您的更改或存储他们之前,你可以合并”?

我在我的本地机器上做了一些更新,把它们推送到了一个远程仓库,现在我正试图把这些更改拖到服务器上,

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改变了在服务器上的configuration文件中的东西。 我不在乎是否本地副本或远程副本在服务器上(我认为远程副本是最好的),我只是想能够合并其余的更改(插件更新)。

有任何想法吗?

您不能合并本地修改。 Git保护您不会丢失潜在的重要变化。

你有三个select。

1.使用提交更改

  git commit -m "My message" 

把它藏起来

存储作为一个堆栈,您可以在其中推送更改,然后以相反的顺序popup它们。

隐藏types:

 git stash 

做合并,然后拉藏匿:

 git stash pop 

3.放弃本地更改

使用git reset --hard 。 或者git checkout -t -f remote/branch

3. a)放弃特定文件的本地更改

使用git checkout filename

 git stash git pull <remote name> <remote branch name> (or) switch branch git stash apply --index 

第一条命令暂时存储您的更改,并丢弃工作目录中的更改

第二个命令,你可以拉/切换分支

第三条命令恢复您暂时丢弃的重要更改。 (–index选项对于那些不上演的文件是有用的)

参考Git – 存储

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

变基

对于简单的修改,可以在修改之前尝试重新绑定,例如

 git pull origin master -r 

所以它会在获取之后将当前分支应用到上游分支的顶部。

这相当于: checkout masterfetchrebase origin/master git命令。

这是一种潜在的危险操作模式。 它重写历史,当你发布历史时,这并不是一个好兆头。 除非你仔细阅读了git-rebase(1)否则不要使用这个选项。


查看

如果你不关心你的本地变化,你可以切换到其他分支临时(强制),并切换回来,例如

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

重启

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

 git reset HEAD --hard 

如果上面的内容不起作用,那么可能是git规范化文件( .gitattributes )中的规则,所以最好提交它所说的内容。 或者你的文件系统不支持权限,所以你必须在你的gitconfiguration中禁用filemode

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

所以我碰到的情况如下:

错误:对以下文件的本地更改将被合并覆盖:wp-content / w3tc-config / master.php请在提交所做的更改或存储之前先将其合并。

除此之外,是遥远的:所以实际上是这样的:

remote:error:对以下文件的本地更改将被merge:some / file.ext覆盖请在提交更改或隐藏之前将其合并。

发生了什么事情(我认为,并非100%肯定)git post接收挂钩已经开始运行,由于远程服务器存储库中的移动变化,这在理论上应该没有被触及。

所以我最终通过跟踪post-receive钩子并find了这个,不得不去到服务器上的远程存储库,并且发生了变化(这不是我的本地存储库,事实上,说,它匹配,没有变化,没有提交,最新等)所以,而在本地,没有变化,在服务器上,然后做了一个git checkout -- some/file.ext然后本地和远程存储库实际上匹配,我可以继续工作和部署。 不完全确定这种情况是怎么发生的,尽pipe几十个开发者加上IT变化可能与此有关。