如何忽略 Git pull 上的以下错误消息?
您对以下文件的本地更改将被合并覆盖
如果我想覆盖它们怎么办?
我已经尝试过类似的东西git pull -f
,但没有任何效果。
需要明确的是,我只想覆盖特定的更改,而不是所有内容。
如果你想从你的工作副本中删除所有本地更改 - 包括 git 未跟踪的文件 - 只需存储它们:
git stash push --include-untracked
如果您不再需要它们,您现在可以删除该存储:
git stash drop
如果您不想隐藏您已经暂存的更改 - 例如使用git add
- 然后添加选项--keep-index
。但是请注意,如果这些分阶段的更改与上游的更改发生冲突,这仍然会阻止合并。
如果您只想覆盖本地更改的特定部分,有两种可能性:
提交您不想覆盖的所有内容,其余部分使用上述方法。
用于git checkout path/to/file/to/revert
您要覆盖的更改。确保该文件不是通过git reset HEAD path/to/file/to/revert
.
好吧,在其他两个答案的帮助下,我想出了一个直接的解决方案:
git checkout HEAD^ file/to/overwrite
git pull
这对我来说可以覆盖所有本地更改并且不需要身份:
git reset --hard
git pull
这里有这么多答案,我不想再添加另一个答案,但以上所有答案都比他们需要的要笨拙。我必须一直这样做,因为 Git 似乎变得困惑并说我修改了未更改的文件(无法恢复,因为它们没有更改,但我无法拉动,因为它们应该已经更改)最简单和到目前为止我发现的最快的是:
git stash
git stash drop
git pull
注意:本地更改将丢失
这是一个丢弃分阶段更改的解决方案:
git reset file/to/overwrite
git checkout file/to/overwrite
您可以在进行合并之前提交更改,也可以将它们存储起来:
git stash save
git merge origin/master
git stash pop
如果要放弃对一个文件的本地更改,可以执行以下操作:
git checkout -- <file>
然后你可以用最新版本覆盖文件[s]:
git pull
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
保存并应用本地更改时没有任何问题
如果您的存储库包含一些已从以下位置删除的文件master
:
git checkout master
git fetch origin
git reset --hard origin/master
git checkout -b newbranch
有时,这些都不起作用。烦人的是,由于我认为 LF 的原因,可以删除文件,然后拉取。并不是我推荐这个解决方案,但如果文件不存在,git 不会无用地通知您您的更改(甚至可能不是更改)将被覆盖,并让您继续。
使用风险自负。
git stash save --keep-index
没有为我工作。
下面的命令按预期工作。
git reset --hard
git pull
如果您不需要它们,它会覆盖所有本地更改。
在最近的 Git 中,您可以添加-r
/ --rebase
onpull
命令以在获取后将当前分支重新定位到上游分支之上。警告应该会消失,但您可能会遇到一些需要解决的冲突。
或者,您可以强制签出不同的分支,然后再返回master
,例如:
git checkout origin/master -f
git checkout master -f
然后像往常一样再次拉动它:
git pull origin master
使用此方法可以节省您的时间来避免存储 ( git stash
) 和潜在的权限问题、重置文件 ( git reset HEAD --hard
)、删除文件 ( git clean -fd
) 等。此外,上述内容更容易记住。
尝试这个
git fetch --all
git reset --hard origin/master
git pull origin master
强制拉动对我来说是有效的
这个问题是因为您在本地对文件/s 进行了更改,并且 Git 存储库中存在相同的文件/s 更改,因此在拉/推之前,您需要存储本地更改:
覆盖单个文件的本地更改:
git reset file/to/overwrite
git checkout file/to/overwrite
覆盖所有本地更改(所有文件中的更改):
git stash
git pull
git stash pop
此问题也可能是因为您位于未与主分支合并的分支上。
git reset --hard && git clean -df
注意:这将重置并删除所有未跟踪的文件。
这是我解决问题的策略。
问题陈述
我们需要对超过 10 个文件进行更改。我们试过了PULL (git pull origin master)
,但 Git 喊道:
错误:您对以下文件的本地更改将被合并覆盖:请在合并之前提交您的更改或存储它们。
我们尝试执行commit
then 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 获取工作目录的脏状态——即修改后的跟踪文件和暂存的更改——并将其保存在未完成的更改堆栈中,您可以随时重新应用。
这对我来说可以丢弃实时远程服务器上的更改并从源代码控制 GitHub 中提取:
git reset --hard
git pull origin master
您可以使用它来覆盖文件
git checkout file_to_overwrite
解决此问题的最佳方法是:
git checkout -- <path/file_name>
之后,您可以通过以下方式覆盖文件:
git pull origin master
如果您想在服务器上保留生产更改,只需合并到一个新的配置项中。处理方法如下:
git stash
git pull
git stash pop
也许您没有执行所有操作。你可以知道接下来你能做什么。
如果你想覆盖特定的更改,你需要某种方式告诉它你想忘记哪些。
您可以尝试有选择地存储您想要放弃使用的更改git stash --patch
,然后使用git stash drop
. 然后,您可以拉入远程更改并正常合并它们。
出现错误“您对以下文件的本地更改将被合并覆盖”是因为您在本地存储库中有一些尚未提交的更改,因此在从远程存储库中提取之前,只需提交本地存储库中的更改。
假设您的远程仓库有一些分支 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 reset --hard && git pull
对我来说,这很有效:-
git clean -f
。git pull
我有一个特殊情况:我有一个带有 --assume-unchanged 的文件。很难找到,因为git status
命令没有显示任何更改
我是 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
希望这可以帮助。
我已经尝试过并且成功了,在拉取之前,让您提交所有未提交的文件,那么您将不会收到来自 AS 的消息。
由于您的分支在 xx 提交后位于 'origin/dev' 后面,并且可以快速转发。试试这个命令:
git checkout .
git pullenter code here
希望能解决您的问题。
我忽略了我的仓库中的一个文件,当我这样做时,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 操作成功了。
我从主人那里拉出来时遇到了这个。
我使用 Visual Studio 处理它的方式;
希望这可以帮助!
我的解决方案是delete
来自 IDE 外部的文件将被覆盖,然后pull
.
(您可以随时备份和手动合并未跟踪的数据)
如果此错误是由于行尾引起的,
git add
git checkout mybranch
将工作。我不太确定它为什么会起作用。
对于 Pycharm,您可以执行 Git-->Revert 然后拉取。
检查您可以覆盖并丢失本地更改的文件,然后
git checkout --ours ${filePath}
git merge upstream/master
我从 vim 编辑器命令行执行
:PluginUpdate命令时收到相同的错误消息
“请在合并之前提交您的更改或存储它们”
1.只是从物理上删除了包含插件的文件夹
rm -rf ~/.vim/bundle/plugin-folder/
2.并从 vim 命令行重新安装它,
:PluginInstall!
因为我的 ~/.vimrc 包含将插件构建到该目的地的说明:
这创建了正确的文件夹,
并将新包放入该文件夹 ~./.vim/bundle/ reinstalled-plugins-folder
“ ! ”符号(由于PluginUpdate命令不成功)更改
为“ + ”符号,然后使用PluginUpdate命令。
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(-)
只需提交本地更改并合并 commit -a