如何解决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 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
)中的规则,所以最好提交它所说的内容。 或者你的文件系统不支持权限,所以你必须在你的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变化可能与此有关。