我怎么忽略我的本地修改“混帐拉”的错误会被合并被覆盖?

问题描述 投票:474回答:26

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

您当地的下列文件中的更改将被合并被覆盖

如果我想覆盖他们吗?

我已经试过之类的东西git pull -f,但没有任何工程。

需要明确的是,我只希望覆盖特定的变化,而不是一切。

git git-pull git-stash
26个回答
374
投票

如果你想删除你的工作副本的所有本地更改,只需藏匿他们:

git stash save --keep-index

如果你不需要他们了,你现在可以丢弃藏匿处:

git stash drop

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

  1. 提交你不希望覆盖和使用上面的方法,其余的一切。
  2. 使用git checkout path/to/file/to/revert您要覆盖更改。确保文件不通过git reset HEAD path/to/file/to/revert上演。

8
投票

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

下面的命令都按预期。

git reset --hard
git pull

它覆盖所有地方的变化,如果你不需要他们。


7
投票

这个问题是因为你所做的更改对本地文件/ s和相同的文件/秒,在Git仓库的变化存在,所以拉前/推你需要藏匿的局部变化:

要覆盖单个文件的局部变化:

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

要覆盖所有的局部变化(在所有文件中的更改):

git stash
git pull
git stash pop

另外这个问题可能是因为你是在未与主分支合并的分支。


5
投票

git reset --hard && git clean -df

这将重置并删除任何未跟踪文件。


4
投票

你可以用这个覆盖文件

git checkout file_to_overwrite

4
投票

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

git checkout -- <path/file_name>

之后,你可以通过覆盖该文件:

git pull origin master

4
投票

这个工作对我来说丢弃现场远程服务器上进行更改,并从源头上控制拉GitHub的:

git reset --hard
git pull origin master

3
投票

如果你想覆盖的具体变化,你需要告诉它你想忘记哪些的一些方法。

你可以尝试选择性地积攒要放弃使用git stash --patch,然后丢弃与git stash drop是藏匿的变化。然后,您可以拉远程更改并将其合并为正常。


3
投票

这里是我的策略来解决这个问题。

问题陈述

我们需要在超过10个文件的变化。我们试图PULL (git pull origin master),但Git的喊道:

错误:您当地的下列文件中的更改将被合并覆盖:请提交更改或藏匿,然后才能合并。

我们试图执行commit然后pull,但他们也不能工作。

我们在肮脏的阶段实际上,因为文件中的“临时区域” a.k.a“索引区”,一些人在“头部区域” a.k.a“本地的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的藏匿命令。积攒需要你的工作目录的脏状态 - 也就是说,修改后的跟踪文件和暂存的变更 - 并将其保存的,你可以在任何时候重新申请未完成的变化的堆栈。


2
投票

我有这样一个特殊情况:我曾与它--assume未发生变化的文件。这是很难找到,因为git status命令没有显示任何改变


2
投票

如果你想在服务器上保留生产的变化,只是合并成一个新的配置项。的处理方法如下:

git stash
git pull
git stash pop

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


277
投票

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

git checkout HEAD^ file/to/overwrite
git pull

1
投票

我忽略了我的回购协议文件,当我做了git pull upstream master我得到了以下错误:

错误:您当地的下列文件中的更改将被合并覆盖:myfile.js请提交更改或藏匿,然后才能合并。中止

要解决它,我做了以下

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

然后我做了git status和得到这个消息

在分支掌握你的分支是落后4个提交“起源/主”,可快进。 (使用“混帐拉”来更新你的本地分支)

没有上演更改承诺:(使用“混帐添加...”更新的内容将被提交)(使用“git的结帐 - ...”丢弃在工作目录的变化)

修改:myfile.js

没有变化加入到提交(使用“GIT中增加”和/或“git的承诺-a”)

然后我也git checkout myfile.js其次git pull upstream master。这一次git的拉操作成功。


1
投票

从主拉,当我遇到了这一点。

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

  1. 首先,我执行撤消承诺在我的解决方案。
  2. 然后我做了Git的拉过程。

希望这可以帮助!


0
投票

如果此错误是因为行尾的,

git add
git checkout mybranch

将工作。我真的不知道为什么它的工作原理。


0
投票

对于Pycharm,你可以做的Git - >恢复,然后拉。


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


0
投票

我曾尝试和成功地拉动之前,让承诺,你有没有犯所有的文件,那么您将不会收到来自AS的消息。


0
投票

我得到了同样的错误消息执行 :PluginUpdate从vim的编辑命令行命令

“请提交更改或藏匿他们,你合并之前”

1.刚物理删除的文件夹包含插件形成

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

2.并重新安装其从VIM命令行 :插件安装! 因为我的〜/ .vimrc含有建立插件到该目的地的说明:

enter image description here

这创造正确的文件夹, 并得到了新包到该文件夹​​〜./。VIM /包/重新安装,插件文件夹 该“!”迹象(由于不成功PluginUpdate命令)被改变 以“+”号,之后工作的PluginUpdate命令。


0
投票

最简单的解决方法是:

git reset --hard && git pull

178
投票

这对我的作品覆盖所有本地变更,也不需要身份:

git reset --hard
git pull

72
投票

下面是扔掉上演变化的解决方案:

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

59
投票

您可以提交更改你在合并之前,或者你藏匿它们:

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

41
投票

如果你想放弃上一个文件你的本地修改,你可以做到以下几点:

git checkout -- <file>

然后,你可以覆盖该文件[S]与最新版本只是在做:

git pull

16
投票

如果你的资料​​库中包含有从master删除一些文件:

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

11
投票

有时,所有这些工作。烦人,因为我觉得LF东西,什么工作被删除的文件,然后拉动。这并不是说我建议这个解决方案,但如果文件不存在,git会不会徒劳地通知您,您的改变(这可能甚至不变化)将得到覆盖,并会让你继续。

使用您自己的风险。


8
投票

在最近的Git,你可以在-r命令添加--rebase / pull取后变基上游分支的顶部当前分支。警告应该消失,但你会得到一些冲突,你将需要解决的风险。


或者你可以检出不同的分支力量,然后回去再master,例如:

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

然后再次把它像往常一样:

git pull origin master

使用这种方法可以一次拯救你藏起来(git stash)和潜在的权限问题,正在重置文件(git reset HEAD --hard),删除文件(git clean -fd)等。此外,上面很容易记住。

© www.soinside.com 2019 - 2024. All rights reserved.