如何忽略 Git pull 中出现的以下错误消息?
以下文件的本地更改将被合并覆盖
如果我想要重写它们怎么办?
我尝试了像 git pull -f
这样的方法,但都没有起作用。
需要明确的是,我只想覆盖特定的更改,而不是所有的更改。
试一试
git fetch --all
git reset --hard origin/master
git pull origin master
强制拉取对我来说可行
git stash save --keep-index
对我无效。
以下命令按预期工作。
git reset --hard
git pull
如果您不需要本地更改,它会覆盖所有本地更改。
在最近的Git中,你可以在pull
命令中添加-r
/--rebase
选项,以便在获取远程分支之后将当前分支变基于上游分支。这样应该能够消除警告,但有一定的风险会出现一些冲突需要解决。
或者你可以强制检出不同的分支,然后再回到master
分支,例如:
git checkout origin/master -f
git checkout master -f
然后像往常一样再拉一次:
git pull origin master
使用这种方法可以节省时间,避免了stash(git stash
)和潜在的权限问题,重置文件(git reset HEAD --hard
),删除文件(git clean -fd
)等操作。此外,上述操作更容易记忆。
git reset file/to/overwrite
git checkout file/to/overwrite
要覆盖本地所有更改(所有文件中的更改):
git stash
git pull
git stash pop
这是我解决问题的策略。
问题陈述
我们需要更改10多个文件。我们尝试使用PULL(git pull origin master)
,但Git报错:
error: Your local changes to the following files would be overwritten by merge: Please, commit your changes or stash them before you can merge.
我们试图先执行commit
然后再pull
,但它们也不起作用。
解决方案
实际上,我们处于"脏"阶段,因为这些文件处于“暂存区”(即“索引区”),有些文件处于“工作区”(即“本地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》,第二版:
通常情况下,当您在项目的某个部分工作时,事情变得混乱不堪,并且您想暂时切换到其他分支进行工作。但问题是,您不想为了能够稍后回到此点而提交未完成的工作。解决这个问题的方法是使用 git stash 命令。Stash 命令会将您的工作目录的 脏 状态(即修改过的跟踪文件和已暂存的更改)保存到一个未完成更改的堆栈中,您可以随时重新应用它们。
git reset --hard && git clean -df
注意:这将重置并删除任何未被跟踪的文件。
我用以下方法成功地在远程服务器上放弃更改并从源代码控制GitHub中获取:
git reset --hard
git pull origin master
git checkout -- <path/file_name>
然后,您可以通过以下方式覆盖该文件:
git pull origin master
git checkout -- path/*
,然后就可以执行pull操作了。 - Stephen O'Flynngit checkout file_to_overwrite
如果你想在服务器上保留生产更改,只需将其合并到新的配置项中。处理方法如下:
git stash
git pull
git stash pop
git config core.fileMode false
的意思是“关闭 Git 对文件模式的检查”,这将节省我的时间。 - Nolwennig