How do I resolve git saying “Commit your changes or stash them before you can merge”?
我在本地机器上进行了一些更新,将它们推送到远程存储库,现在我正尝试将更改拉到服务器上,并获得消息;
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.
所以我跑了,
1 | git checkout -- wp-content/w3tc-config/master.php |
然后再试了一次,我得到了同样的信息。我假设
有什么想法吗?
不能与本地修改合并。Git保护您不丢失可能重要的更改。
您有三种选择:
- 使用提交更改
1git commit -m"My message"
- 把它藏起来。
存储充当一个堆栈,您可以在其中推送更改,并以相反的顺序弹出它们。
隐藏,类型
1git stash进行合并,然后拉出隐藏:
1git stash pop - 放弃本地更改
使用
或:放弃特定文件的本地更改git reset --hard 。或git checkout -t -f remote/branch 。使用
git checkout filename 。
1 2 3 | git stash git pull <remote name> <remote branch name> (or) switch branch git stash apply --index |
第一个命令将您的更改临时存储在stash中,并将其从工作目录中删除。
第二个命令切换分支。
第三个命令恢复存储在stash中的更改(
您可以尝试以下方法之一:
重碱对于简单的更改,尝试在其顶部重新定位,同时拖动更改,例如
1 | git pull origin master -r |
因此,它将在提取后将当前分支应用于上游分支的顶部。
这相当于:
This is a potentially dangerous mode of operation. It rewrites history, which does not bode well when you published that history already. Do not use this option unless you have read
git-rebase(1) carefully.
结帐
如果您不关心您的本地更改,您可以切换到其他临时分支(使用force),然后将其切换回,例如。
1 2 | git checkout origin/master -f git checkout master -f |
重置
如果您不关心您的本地更改,请尝试将其重置为head(原始状态),例如
1 | git reset HEAD --hard |
如果上面没有帮助,那么可能是您的git规范化文件(
相关:如何强制"git pull"覆盖本地文件?
所以我遇到的情况是:
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.
但在那之前,是偏远的:所以实际上这是:
remote: error: Your local changes to the following files would be overwritten by merge:
some/file.ext
Please, commit your changes or stash them before you can merge.
发生的事情是(我认为不是100%正面的),由于远程服务器存储库中的移动变化,Git Post接收钩子开始运行并发生故障,从理论上讲,这是不应该触及的。
因此,我最终通过跟踪接收后挂钩发现这一点,不得不转到服务器上的远程存储库,并进行了更改(不在我的本地存储库中,事实上,该存储库说它匹配,没有更改,没有要提交的内容,最新的内容等),所以在本地服务器上,服务上没有更改。r,然后我做了一个
试试这个
1 | git stash save"" |
然后再拉一次
警告:这将删除未跟踪的文件,因此这不是这个问题的好答案。
在我的情况下,我不想保留这些文件,所以这对我很有用:
Git 2.11及更高版本:
1 | git clean -d -fx . |
老Git:
1 | git clean -d -fx"" |
参考:http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-X表示忽略的文件也会被删除,以及Git不知道的文件。
-d意味着除了未跟踪的文件之外,还要删除未跟踪的目录。
-F必须强制运行。
在拉之前请求承诺
- 暂存
- git pull origin<
>
如果需要的话:
- Git StApple应用
对我来说,只有
提交不是一种选择,因为没有什么可提交的。
藏匿不是一种选择,因为没有什么可以藏匿的。
看起来它可能来自于
我尝试了第一个答案:
最后错误信息消失了:
1:
2:
3:
然后成功了。希望这个答案有帮助。:)
这可能是由CRLF问题引起的。
看:我为什么要用core.autocrlf=true在git中?
使用此选项可拉取并强制更新:
1 2 | git pull origin master git checkout origin/master -f |
在我的案例中,我备份并删除了Git抱怨的文件,提交了,然后我终于可以签出另一个分支。
然后我替换了文件,复制了内容,继续进行,就好像什么都没发生一样。