我如何忽略关于我的本地更改将被合并覆盖的“git拉”错误?

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

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

如果我想要覆盖它们怎么办?

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

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

1309499 次浏览

如果您想从工作副本中删除所有本地更改(包括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暂存。

如果你想覆盖特定的更改,你需要一些方法来告诉它你想忘记哪些。

您可以尝试使用git stash --patch有选择地隐藏要放弃的更改,然后使用git stash drop删除该存储。然后您可以拉入远程更改并像正常一样合并它们。

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

git checkout HEAD^ file/to/overwritegit pull

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

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

如果您的存储库包含一些从master中删除的文件:

  1. git checkout master
  2. git fetch origin
  3. git reset --hard origin/master
  4. git checkout -b newbranch

您可以在执行合并之前提交更改,也可以隐藏它们:

  1. git stash save
  2. git merge origin/master
  3. git stash pop

您可以使用它来覆盖文件

git checkout file_to_overwrite

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

git checkout -- <file>

然后,您可以使用最新版本覆盖文件[s],只需执行以下操作:

git pull

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

使用在你自己的风险。

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

git reset --hardgit pull

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


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

git checkout origin/master -fgit checkout master -f

然后像往常一样再拉一遍:

git pull origin master

使用此方法可以节省您从存储(git stash)和潜在的权限问题,重置文件(git reset HEAD --hard),删除文件(git clean -fd)等的时间。

这让我放弃了实时远程服务器上的更改并从源代码控制GitHub中提取:

git reset --hardgit pull origin master

我有一个特殊的例子:我有一个文件,上面有--suxy-未更改。很难找到,因为git status命令没有显示任何更改

我忽略了repo中的一个文件,当我做git pull upstream master时,我收到了以下错误:

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

为了解决这个问题,我做了以下事情

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

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

在分支master上,您的分支落后于“原始/主”4次提交,并且可以快进。(使用“git拉取”更新您的本地分支)

未为提交暂存的更改:(使用“git add…”进行更新将提交什么)(使用“git check out--…”丢弃工作目录更改)

修改:myfile.js

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

然后我做了git checkout myfile.js,然后是git pull upstream master。这次git拉操作成功了。

解决这个问题的最好方法是:

git checkout -- <path/file_name>

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

git pull origin master

这是我解决问题的策略。

问题陈述

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

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

我们尝试执行commitpull,但它们也不起作用。

解决方案

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

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

我们遵循以下步骤

  • 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命令。隐藏需要您的工作目录的脏状态-即您修改的跟踪文件和分阶段更改-并将其保存在一堆未完成的您可以随时重新应用的更改。

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

git stashgit pullgit stash pop

也许你不执行所有的操作。你可以知道你下一步能做什么。

如果这个错误是因为行尾,

git addgit checkout mybranch

会起作用的。我不知道为什么会起作用。

我从大师那里拉出来的时候遇到了这个。

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

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

希望这有帮助!

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

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

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

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

git stashgit pullgit stash pop

此外,这个问题可能是因为您在一个未与主分支合并的分支上。

对于Py魅力,您可以执行Git-->恢复,然后拉取。

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

然后你使用:

git stashgit lfs migrate importgit pull

我案子的全部输出

λ git stashSaved 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 pullUpdating 5a4ad44..b25f79derror: Your local changes to the following files would be overwritten by merge:public/apple-touch-icon.pngPlease commit your changes or stash them before you merge.Aborting
λ git lfs migrate importmigrate: Fetching remote refs: ..., donemigrate: Sorting commits: ..., donemigrate: Rewriting commits: 100% (0/0), donemigrate: Updating refs: ..., donemigrate: checkout: ..., done

λ git pullUpdating 5d4ad47..a25c79aFast-forwardpublic/apple-touch-icon.png | Bin 2092 -> 130 bytespublic/favicon.ico          | Bin 6518 -> 1150 bytes2 files changed, 0 insertions(+), 0 deletions(-)

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

git stash save --keep-index不适合我。

下面的命令按预期工作。

git reset --hardgit pull

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

在拉取之前,您必须提交所有尚未提交的文件,然后您将不会收到来自AS的消息。

git reset --hard && git clean -df

注意:这将重置和删除任何未跟踪的文件。

我从vim编辑器命令行得到了执行
:插件更新命令的相同错误消息

msgstr"请在合并前提交或隐藏更改"

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

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

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

在此处输入图片描述

这创建了正确的文件夹,
并将新包放入该文件夹~。 /.vim/bundle/重新安装-插件-文件夹
!”标志(由于插件更新命令不成功)将
更改为“+”符号,之后执行插件更新命令。

最简单的解决方案是:

git reset --hard && git pull

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

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

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

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

希望这有帮助。

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

假设您的远程存储库有一些分支xyz然后您希望远程repo xyz分支合并(复制到)本地repo xyz分支,

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

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

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

这里有太多的答案,我不想再添加一个,但是上面的所有都比它们需要的要笨拙。我必须一直这样做,因为Git似乎变得困惑,说我修改了没有改变的文件(不能恢复,因为它们没有改变,但我不能拉取,因为它们应该已经改变了)

git stashgit stash dropgit pull

通知当地更改将丢失

git pull --rebase --autostash
  -r, --rebase[=false|true|merges|preserve|interactive]When true, rebase the current branch on top of theupstream branch after fetching. If there is aremote-tracking branch corresponding to the upstream
  --autostash, --no-autostashBefore starting rebase, stash local modifications away ifneeded, 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 branch4. your local commits are restored on top of upstream5. your local changes are restored to working directory

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

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

在此处输入图片描述

当我尝试拉取远程更改时,我得到错误:

在此处输入图片描述

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

在此处输入图片描述

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

在此处输入图片描述

现在我的局部变化有点低:输入图片描述

只需提交本地更改并合并请求参数-a

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

git checkout --ours ${filePath}git merge upstream/master

试试这个

git fetch --all
git reset --hard origin/master
git pull origin master

强行拉对我来说是工作

对我来说,这奏效了:-

  1. 首先我清理了所有未跟踪的文件,运行->git clean -f
  2. git pull

由于您的分支在xx提交的“原始/开发”后面,并且可以快进。试试这个命令:

git checkout .git pullenter code here

希望能解决你的问题。

示例

[root@localhost www]# git pullUsername for 'http://159.65.151.11': amolPassword 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/OpenCCf793c8e..b8fe60c  v1.18.0_24Feb2022 -> origin/_v1.18.0_24Feb2022error: Your local changes to the following files would be overwritten by merge:cc/routes/web.phpPlease, commit your changes or stash them before you can merge.Aborting

解决方案(忽略本地文件中已提交的更改)

git checkout HEAD^ cc/routes/web.phpgit pull

如果您想推送所有文件,请尝试以下操作git push --force-with-lease origin master