协慌网

登录 贡献 社区

如何解决 git 所说的 “提交更改或在合并之前将其隐藏” 的问题?

我在本地计算机上进行了一些更新,将它们推送到远程存储库中,现在我正尝试将更改拉到服务器上,并且得到消息;

错误:您对以下文件的本地更改将被合并覆盖:

wp-content / w3tc-config / master.php

请先提交您的更改或将其存储起来,然后再进行合并。

所以我跑了

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

并再次尝试,我得到相同的消息。我假设w3tc更改了服务器上的配置文件中的某些内容。我不在乎本地副本还是远程副本在服务器上(我认为远程副本最好),我只想能够合并其余的更改(插件更新)。

有任何想法吗?

答案

您无法与本地修改合并。 Git 保护您避免丢失潜在的重要更改。

您有三种选择:

  • 使用提交更改

    git commit -m "My message"
  • 藏起来。

    存放是一个堆栈,您可以在其中推送更改,然后以相反的顺序弹出更改。

    要隐藏,请键入

    git stash

    进行合并,然后拉出藏匿处:

    git stash pop
  • 放弃本地更改

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

    或者:放弃特定文件的本地更改

    使用git checkout filename

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

第一条命令将您的更改临时存储在存储中,并将其从工作目录中删除。

第二条命令切换分支。

第三个命令将还原您存储在存储中的更改( --index选项可用于确保已暂存的文件仍处于暂存状态)。

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

重新设定

对于简单的更改,请尝试在更改的基础上重新进行更改,例如

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 )中的规则,因此最好提交其内容。或者您的文件系统不支持权限,因此您必须在 git config 中filemode

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