如何忽略有关Git pull的以下错误消息?
您对以下文件的本地更改将被合并覆盖
如果我想覆盖它们怎么办?
我已经尝试过类似的方法git pull -f
,但没有任何效果。
需要明确的是,我只想覆盖特定的更改,而不是所有内容。
git config core.fileMode false
节省时间
如何忽略有关Git pull的以下错误消息?
您对以下文件的本地更改将被合并覆盖
如果我想覆盖它们怎么办?
我已经尝试过类似的方法git pull -f
,但没有任何效果。
需要明确的是,我只想覆盖特定的更改,而不是所有内容。
git config core.fileMode false
节省时间
Answers:
如果要从工作副本中删除所有本地更改(包括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^ path/to/file/to/revert
。使用HEAD ^改变了一切。
save --keep-index
”。
在其他两个答案的帮助下,我提出了一个直接的解决方案:
git checkout HEAD^ file/to/overwrite
git pull
这适用于我覆盖所有本地更改,并且不需要身份:
git reset --hard
git pull
这是一个解决方案,可消除分阶段进行的更改:
git reset file/to/overwrite
git checkout file/to/overwrite
您可以在进行合并之前提交更改,也可以隐藏它们:
git stash save
git merge origin/master
git stash pop
--autostash
选项仅适用于--rebase
选项(
如果要放弃对一个文件的本地更改,可以执行以下操作:
git checkout -- <file>
然后,您可以使用最新版本覆盖文件,只需执行以下操作:
git pull
git reset HEAD~
,然后执行git checkout
git checkout -- <file>
失败error: pathspec '<file>' did not match any file(s) known to git.
有时,这些都不起作用。烦人的是,由于我认为是LF,将删除文件然后再进行拉动将是可行的。并不是我建议您使用此解决方案,但是如果文件不存在,git不会毫无用处地通知您您所做的更改(甚至可能不是更改)将被覆盖,并让您继续。
使用风险自负。
在最新的Git中,您可以添加-r
/ --rebase
on pull
命令以在提取后将当前分支重新置于上游分支之上。警告应该消失了,但是有可能会遇到一些需要解决的冲突。
或者,您可以强制签出其他分支,然后master
再次返回,例如:
git checkout origin/master -f
git checkout master -f
然后像往常一样再次拉:
git pull origin master
使用此方法可以节省存储时间(git stash
)和潜在的权限问题,重置文件(git reset HEAD --hard
),删除文件(git clean -fd
)等时间。此外,上面的内容更容易记住。
git reset --hard && git clean -df
注意:这将重置并删除所有未跟踪的文件。
您可以使用它来覆盖文件
git checkout file_to_overwrite
这对我有用,可以放弃实时远程服务器上的更改并从源代码控制GitHub中提取:
git reset --hard
git pull origin master
这是我解决问题的策略。
问题陈述
我们需要对10个以上的文件进行更改。我们尝试过PULL (git pull origin master)
,但是Git大喊:
错误:您对以下文件的本地更改将被合并覆盖:请先提交更改或将其存储起来,然后再进行合并。
我们尝试执行commit
,然后执行pull
,但它们也不起作用。
解
实际上,我们处于脏阶段,因为文件位于“暂存区”(也称为“索引区”)中,而某些文件位于“ Head Area”(也称为“本地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命令。暂存会占用工作目录的脏状态(即,已修改的跟踪文件和已分阶段的更改),并将其保存在未完成的更改堆栈中,您可以随时重新应用它们。
TL; DR;
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
本地更改被保存并自动应用时没有任何问题
我有一个特殊的情况:我的文件上带有-假定不变。很难找到,因为该git status
命令未显示任何更改
我在回购中忽略了一个文件,当我这样做时git pull upstream master
,出现以下错误:
错误:您对以下文件的本地更改将被merge覆盖:myfile.js请在合并之前提交更改或存储更改。堕胎
为了解决这个问题,我做了以下工作
git update-index --no-assume-unchanged myfile.js
然后我git status
得到了这个消息
在分支母版上您的分支落后“起源/母版” 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处理它的方式;
希望这可以帮助!
我是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
希望这可以帮助。
出现错误“您对以下文件的本地更改将被合并覆盖”,是因为您在本地存储库中有一些尚未提交的更改,因此在从远程存储库提取之前,只需在本地存储库中提交更改。
假设您的远程仓库有一些分支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-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(-)