762

如何忽略 Git pull 上的以下错误消息?

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

如果我覆盖它们怎么办?

我已经尝试过类似的东西git pull -f,但没有任何效果。

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

4

37 回答 37

579

如果你想从你的工作副本中删除所有本地更改 - 包括 git 未跟踪的文件 - 只需存储它们:

git stash push --include-untracked

如果您不再需要它们,您现在可以删除该存储:

git stash drop

如果您不想隐藏您已经暂存的更改 - 例如使用git add- 然后添加选项--keep-index。但是请注意,如果这些分阶段的更改与上游的更改发生冲突,这仍然会阻止合并。


如果您只想覆盖本地更改的特定部分,有两种可能性:

  1. 提交您不想覆盖的所有内容,其余部分使用上述方法。

  2. 用于git checkout path/to/file/to/revert您要覆盖的更改。确保该文件不是通过git reset HEAD path/to/file/to/revert.

于 2013-01-14T12:17:14.840 回答
395

好吧,在其他两个答案的帮助下,我想出了一个直接的解决方案:

git checkout HEAD^ file/to/overwrite
git pull
于 2013-01-14T14:04:31.867 回答
365

这对我来说可以覆盖所有本地更改并且不需要身份:

git reset --hard
git pull
于 2015-10-01T01:07:30.600 回答
91

这里有这么多答案,我不想再添加另一个答案,但以上所有答案都比他们需要的要笨拙。我必须一直这样做,因为 Git 似乎变得困惑并说我修改了未更改的文件(无法恢复,因为它们没有更改,但我无法拉动,因为它们应该已经更改)最简单和到目前为止我发现的最快的是:

git stash
git stash drop
git pull

注意本地更改将丢失

于 2020-01-21T18:21:01.947 回答
80

这是一个丢弃分阶段更改的解决方案:

git reset file/to/overwrite
git checkout file/to/overwrite
于 2013-10-31T13:45:56.457 回答
79

您可以在进行合并之前提交更改,也可以将它们存储起来:

  1. git stash save
  2. git merge origin/master
  3. git stash pop
于 2014-03-18T12:14:51.127 回答
55

如果要放弃对一个文件的本地更改,可以执行以下操作:

git checkout -- <file>

然后你可以用最新版本覆盖文件[s]:

git pull
于 2015-08-04T12:38:39.310 回答
32
git pull --rebase --autostash
  -r, --rebase[=false|true|merges|preserve|interactive]
      When true, rebase the current branch on top of the 
      upstream branch after fetching. If there is a 
      remote-tracking branch corresponding to the upstream
  --autostash, --no-autostash
      Before starting rebase, stash local modifications away if
      needed, and apply the stash entry when done

我不知道为什么这还没有回答,但解决方案,如您所见,很简单。这里的所有答案都建议相同:删除/保存您的本地更改并应用上游,然后(如果您save)在顶部应用您的本地更改。

什么git pull --rebase --autostash是一步一步:

1. your local changes saved by `--autostash`
2. your local commits saved by `--rebase`
3. commits from upstream applied to your branch
4. your local commits are restored on top of upstream
5. your local changes are restored to working directory

我的情况(可能也是你的):

我有本地更改(工作目录的更改):

在此处输入图像描述

当我尝试提取远程更改时出现错误:

在此处输入图像描述

此更改不与本地更改相交:

在此处输入图像描述

因此,当我自动pull --rebase --autostash保存并应用本地更改时没有任何问题

在此处输入图像描述

现在我的本地更改要低一些: 在此处输入图像描述

于 2020-02-11T15:48:00.667 回答
25

如果您的存储库包含一些已从以下位置删除的文件master

  1. git checkout master
  2. git fetch origin
  3. git reset --hard origin/master
  4. git checkout -b newbranch
于 2014-02-05T06:24:39.287 回答
16

有时,这些都不起作用。烦人的是,由于我认为 LF 的原因,可以删除文件,然后拉取。并不是我推荐这个解决方案,但如果文件不存在,git 不会无用地通知您您的更改(甚至可能不是更改)将被覆盖,并让您继续。

使用风险自负。

于 2015-08-20T18:37:29.920 回答
14

git stash save --keep-index没有为我工作。

下面的命令按预期工作。

git reset --hard
git pull

如果您不需要它们,它会覆盖所有本地更改。

于 2018-05-20T07:03:22.150 回答
10

在最近的 Git 中,您可以添加-r/ --rebaseonpull命令以在获取后将当前分支重新定位到上游分支之上。警告应该会消失,但您可能会遇到一些需要解决的冲突。


或者,您可以强制签出不同的分支,然后再返回master,例如:

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

然后像往常一样再次拉动它:

git pull origin master

使用此方法可以节省您的时间来避免存储 ( git stash) 和潜在的权限问题、重置文件 ( git reset HEAD --hard)、删除文件 ( git clean -fd) 等。此外,上述内容更容易记住。

于 2016-03-16T12:41:44.483 回答
10

尝试这个

git fetch --all 

git reset --hard origin/master

git pull origin master

强制拉动对我来说是有效的

于 2020-12-23T01:26:45.507 回答
8

这个问题是因为您在本地对文件/s 进行了更改,并且 Git 存储库中存在相同的文件/s 更改,因此在拉/推之前,您需要存储本地更改:

覆盖单个文件的本地更改:

git reset file/to/overwrite
git checkout file/to/overwrite

覆盖所有本地更改(所有文件中的更改):

git stash
git pull
git stash pop

此问题也可能是因为您位于未与主分支合并的分支上。

于 2018-01-14T13:19:33.223 回答
8

git reset --hard && git clean -df

注意:这将重置并删除所有未跟踪的文件。

于 2018-06-13T09:49:05.963 回答
8

这是我解决问题的策略。

问题陈述

我们需要对超过 10 个文件进行更改。我们试过了PULL (git pull origin master),但 Git 喊道:

错误:您对以下文件的本地更改将被合并覆盖:请在合并之前提交您的更改或存储它们。

我们尝试执行committhen pull,但它们也没有工作。

解决方案

实际上,我们处于肮脏阶段,因为文件位于“暂存区”又名“索引区”中,而有些文件位于“头区”又名“本地 Git 目录”中。我们想从服务器中提取更改。

以清晰的方式检查此链接以获取有关 Git 不同阶段的信息:GIT Stages

我们遵循以下步骤

  • git stash(这使我们的工作目录变得干净。您的更改由 Git 存储在堆栈中)。
  • git pull origin master(从服务器拉取更改)
  • git stash apply(应用堆栈中的所有更改)
  • git commit -m 'message'(提交更改)
  • git push origin master(将更改推送到服务器)
  • git stash drop(丢弃堆栈)

让我们了解何时以及为什么需要存储

如果您处于状态,则意味着您正在对文件进行更改,然后由于任何原因,您被迫拉动切换到另一个分支以进行一些非常紧急的工作,因此此时您不能拉动或切换直到您提交更改。该stash命令在这里起到了帮助的作用。

从书ProGIT,第 2 版:

通常,当您一直在处理项目的一部分时,事情处于混乱状态,您想切换分支以处理其他事情。问题是,您不想提交完成了一半的工作,以便以后可以回到这一点。这个问题的答案是 git stash 命令。Stashing 获取工作目录的脏状态——即修改后的跟踪文件和暂存的更改——并将其保存在未完成的更改堆栈中,您可以随时重新应用。

于 2017-04-16T13:54:00.253 回答
6

这对我来说可以丢弃实时远程服务器上的更改并从源代码控制 GitHub 中提取:

git reset --hard
git pull origin master
于 2016-04-20T12:31:07.830 回答
5

您可以使用它来覆盖文件

git checkout file_to_overwrite
于 2015-06-27T10:06:42.610 回答
5

解决此问题的最佳方法是:

git checkout -- <path/file_name>

之后,您可以通过以下方式覆盖文件:

git pull origin master
于 2017-04-12T09:19:18.057 回答
4

如果您想在服务器上保留生产更改,只需合并到一个新的配置项中。处理方法如下:

git stash
git pull
git stash pop

也许您没有执行所有操作。你可以知道接下来你能做什么。

于 2017-04-19T11:49:11.630 回答
3

如果你想覆盖特定的更改,你需要某种方式告诉它你想忘记哪些。

您可以尝试有选择地存储您想要放弃使用的更改git stash --patch,然后使用git stash drop. 然后,您可以拉入远程更改并正常合并它们。

于 2013-01-14T12:21:46.583 回答
3

出现错误“您对以下文件的本地更改将被合并覆盖”是因为您在本地存储库中有一些尚未提交的更改,因此在从远程存储库中提取之前,只需提交本地存储库中的更改。

假设您的远程仓库有一些分支 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
}
于 2019-10-23T18:00:06.810 回答
3

最简单的解决方案是:

git reset --hard && git pull
于 2019-08-30T00:56:08.403 回答
3

对我来说,这很有效:-

  1. 首先,我清理了所有未跟踪的文件, run-> git clean -f
  2. git pull
于 2021-07-06T07:51:31.650 回答
2

我有一个特殊情况:我有一个带有 --assume-unchanged 的​​文件。很难找到,因为git status命令没有显示任何更改

于 2016-06-23T20:36:03.250 回答
1

我是 git 新手,不确定我的解决方案是否是个好主意。

我已经测试了所有答案,但没有一个对我有用!

但我找到了另一个解决方案:

1. Backup both of local and repository versions of the file.
2. Delete the file from repository.
3. git add .
4. git commit
5. git push

希望这可以帮助。

于 2019-10-02T17:54:36.030 回答
1

我已经尝试过并且成功了,在拉取之前,让您提交所有未提交的文件,那么您将不会收到来自 AS 的消息。

于 2018-05-21T06:02:51.583 回答
1

由于您的分支在 xx 提交后位于 'origin/dev' 后面,并且可以快速转发。试试这个命令:

git checkout .
git pullenter code here

希望能解决您的问题。

于 2021-11-30T12:48:07.860 回答
1

我忽略了我的仓库中的一个文件,当我这样做时,git pull upstream master我得到了以下错误:

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

为了解决它,我做了以下

git update-index --no-assume-unchanged myfile.js

然后我做git status了并收到了这个消息

在分支 master 你的分支在 'origin/master' 后面 4 次提交,并且可以快进。(使用“git pull”来更新你的本地分支)

未为提交暂存的更改:(使用“git add ...”更新将提交的内容)(使用“git checkout -- ...”放弃工作目录中的更改)

修改:myfile.js

没有添加到提交的更改(使用“git add”和/或“git commit -a”)

然后我确实git checkout myfile.js跟着git pull upstream master。这次 git pull 操作成功了。

于 2017-03-14T14:43:59.210 回答
1

我从主人那里拉出来时遇到了这个。

我使用 Visual Studio 处理它的方式;

  1. 首先,我对我的解决方案执行了撤消提交。
  2. 然后我做了 Git 拉取过程。

希望这可以帮助!

于 2017-09-19T19:53:48.273 回答
1

我的解决方案是delete来自 IDE 外部的文件将被覆盖,然后pull.

(您可以随时备份和手动合并未跟踪的数据)

于 2019-11-26T06:16:06.227 回答
0

如果此错误是由于行尾引起的,

git add
git checkout mybranch

将工作。我不太确定它为什么会起作用。

于 2017-05-08T14:38:40.907 回答
0

对于 Pycharm,您可以执行 Git-->Revert 然后拉取。

于 2018-01-23T21:53:02.013 回答
0

检查您可以覆盖并丢失本地更改的文件,然后

git checkout --ours ${filePath}
git merge upstream/master
于 2020-07-03T07:28:14.387 回答
0

我从 vim 编辑器命令行执行
:PluginUpdate命令时收到相同的错误消息

“请在合并之前提交您的更改或存储它们”

1.只是从物理上删除了包含插件的文件夹

rm -rf ~/.vim/bundle/plugin-folder/

2.并从 vim 命令行重新安装它,
:PluginInstall!
因为我的 ~/.vimrc 包含将插件构建到该目的地的说明:

在此处输入图像描述

这创建了正确的文件夹,
并将新包放入该文件夹 ~./.vim/bundle/ reinstalled-plugins-folder
”符号(由于PluginUpdate命令不成功)更改
为“ + ”符号,然后使用PluginUpdate命令。

于 2019-05-06T15:27:38.107 回答
0

git-lfs如果使用并且文件指针被真实文件覆盖,也会发生此消息。

然后你使用:

git stash
git lfs migrate import
git pull

我的案例的全部输出

λ git stash
Saved working directory and index state WIP on master: 5d4ad47 Merge branch 'feature/...' into 'master'
Encountered 1 file(s) that should have been pointers, but weren't:
        public/apple-touch-icon.png

λ git pull
Updating 5a4ad44..b25f79d
error: Your local changes to the following files would be overwritten by merge:
        public/apple-touch-icon.png
Please commit your changes or stash them before you merge.
Aborting

λ git lfs migrate import
migrate: Fetching remote refs: ..., done
migrate: Sorting commits: ..., done
migrate: Rewriting commits: 100% (0/0), done
migrate: Updating refs: ..., done
migrate: checkout: ..., done


λ git pull
Updating 5d4ad47..a25c79a
Fast-forward
 public/apple-touch-icon.png | Bin 2092 -> 130 bytes
 public/favicon.ico          | Bin 6518 -> 1150 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)

https://github.com/git-lfs/git-lfs/issues/2839

于 2018-05-16T21:30:30.033 回答
-3

只需提交本地更改并合并 commit -a

于 2020-06-15T14:54:12.360 回答