如何忽略在'git pull'中关于本地更改将被合并覆盖的错误?

883

如何忽略 Git pull 中出现的以下错误消息?

以下文件的本地更改将被合并覆盖

如果我想要重写它们怎么办?

我尝试了像 git pull -f 这样的方法,但都没有起作用。

需要明确的是,我只想覆盖特定的更改,而不是所有的更改。


相关但不重复:https://dev59.com/IXVD5IYBdhLWcg3wNIzc - Daniel Hilgarth
12
完全同意!而且,如果只是“覆盖”,这也算不上真正的“合并”,对吧?我每天都在怀念 SVN... - user1944491
6
git config core.fileMode false 的意思是“关闭 Git 对文件模式的检查”,这将节省我的时间。 - Nolwennig
8
可能是重复的问题,与“如何解决git提示'在合并之前提交你的更改或隐藏它们'?”相同。 - TylerH
如果我不想覆盖它们怎么办? - Philip Rego
39个回答

4
如果您想覆盖特定的更改,您需要告诉系统您要放弃哪些更改。您可以尝试使用git stash --patch选择性地隐藏您要放弃的更改,然后使用git stash drop丢弃这个隐藏。然后您可以正常地拉取远程更改并合并它们。

4
最简单的解决方案是:
git reset --hard && git pull

4

由于你的分支比 'origin/dev' 落后 xx 次提交,可以进行快进合并。尝试运行此命令:

git checkout .
git pullenter code here

希望这解决了您的问题。

这听起来最像原始问题所要求的,即最快的方法是丢弃本地更改并接受源代码库中的内容。可能还可以结合其他建议,使用 git clean -f 命令清除未跟踪的文件。 - John

4

错误 "您在本地所做的更改会被合并覆盖" 是因为您在本地仓库中进行了一些尚未提交的更改,因此在从远程仓库拉取之前,请先提交本地仓库中的更改。

假设您的远程仓库有一个名为xyz的分支,您希望将该远程仓库xyz分支合并(复制)到本地仓库xyz分支中,则:

{
git checkout xyz                  //check out to the respective branch in local repo
git commit -m "commiting message" //commit changes if any, in local repo branch xyz
git pull                          //it pulls remote xyz branch into local xyz branch
}

在你运行 git commit 命令后,它不会要求你执行 git push 吗? - Ashok Ogirala

3

示例

[root@localhost www]# git pull
Username for 'http://159.65.151.11': amol
Password for 'http://amol@159.65.151.11':
remote: Counting objects: 34, done.
remote: Compressing objects: 100% (34/34), done.
remote: Total 34 (delta 13), reused 0 (delta 0)
Unpacking objects: 100% (34/34), done.
From http://159.65.151.11/OpenCC
   f793c8e..b8fe60c  v1.18.0_24Feb2022 -> origin/_v1.18.0_24Feb2022
error: Your local changes to the following files would be overwritten by merge:
        cc/routes/web.php
Please, commit your changes or stash them before you can merge.
Aborting

解决方案(忽略本地文件中已提交的更改)
git checkout HEAD^ cc/routes/web.php
git pull

3
我在我的代码库中忽略了一个文件,当我执行git pull upstream master时,出现了以下错误:

错误:合并会覆盖以下文件的本地更改: myfile.js 请在合并之前提交您的更改或将其存储。 中止

为了解决这个问题,我进行了以下操作
git update-index --no-assume-unchanged myfile.js

我接着运行了git status命令,然后收到了这个消息。
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)

        modified:   myfile.js ** 
        ^^^^ THIS IS KEY ^^^^^ - FILE SHOULD APPEAR MODIFIED!!

no changes added to commit (use "git add" and/or "git commit -a")
然后我执行了git checkout myfile.js,接着是git pull upstream master。这次git pull操作成功了。

我建议单独处理文件。在这种情况下,我会先使用 git diff foobar.js 命令,确认没有丢失重要内容后再执行 git restore foobar.js 命令。 - jakebugz617
这对我来说非常有帮助,之前我曾“默默忽略”了一个关于 git update-index --skip-worktree dockerfile 的变更,现在我可以通过 git update-index --no-skip-worktree dockerfile 来恢复它。 - Devin Rhode

3

我有一个特殊的情况:我有一个文件上面打了 --assume-unchanged 标记。这个文件很难找到,因为 git status 命令没有显示任何更改。


我也遇到了同样的问题。你找到解决方法了吗?我想我可以先移除再重新添加 assume-unchanged...我的做法是手动检出那些文件以获取未更改的版本...只是想知道是否有一种方法可以让检出/变基/合并直接覆盖它们。 - David
1
不,我不得不放弃整个“假定未更改”的事情。 - user3458

2
如果这个错误是由于行尾引起的,
git add
git checkout mybranch

将会有效。我不太确定为什么有效。


2

在拉取代码之前,您必须提交所有尚未提交的文件,这样您就不会收到AS的那条消息。


2

我在从主分支pull代码时遇到了这个问题。

我使用Visual Studio处理的方法如下:

  1. 首先,我对我的解决方案执行了撤销提交操作。
  2. 然后,我进行了Git pull过程。

希望这能有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接