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

时间:2013-01-14 12:14:43

标签: git git-pull git-stash

如何在Git pull上忽略以下错误消息?

  

合并

会覆盖对以下文件的本地更改

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

我尝试了类似git pull -f的内容,但没有任何作用。

要清楚,我只想覆盖特定的更改,而不是所有内容。

35 个答案:

答案 0 :(得分:358)

如果要从工作副本中删除所有本地更改,只需存储它们:

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暂存。

答案 1 :(得分:274)

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

git checkout HEAD^ file/to/overwrite
git pull

答案 2 :(得分:160)

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

git reset --hard
git pull

答案 3 :(得分:72)

这是一个抛弃分阶段变化的解决方案:

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

答案 4 :(得分:57)

您可以在进行合并之前提交更改,也可以存储它们:

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

答案 5 :(得分:41)

这里的答案太多了,我不想再添加一个,但是以上所有这些都比需要的笨拙。我必须一直这样做,因为Git似乎很困惑,并说我修改了未更改的文件(无法恢复,因为它们没有更改,但是我无法拉出,因为它们应该已经更改了)。到目前为止,我发现最快的是:

git stash
git stash drop
git pull

注意本地更改将丢失

答案 6 :(得分:38)

如果要在一个文件上放弃本地更改,可以执行以下操作:

git checkout -- <file>

然后你可以使用最新版本覆盖文件[s]:

git pull

答案 7 :(得分:12)

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

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

答案 8 :(得分:9)

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

我的案子(可能也是您的案子):

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

enter image description here

当我尝试进行远程更改时出现错误:

enter image description here

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

enter image description here

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

enter image description here

现在我的本地更改要低一些: enter image description here

答案 9 :(得分: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)等的时间。此外,上面的& #39;更容易记住。

答案 10 :(得分:7)

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

使用风险自负。

答案 11 :(得分:6)

这个问题是因为您已经在文件/本地进行了更改,并且存在与Git存储库中的更改相同的文件,因此在拉/推之前您需要存储本地更改:

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

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

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

git stash
git pull
git stash pop

此问题也可能是因为您所在的分支机构未与主分支机构合并。

答案 12 :(得分:6)

git stash save --keep-index对我不起作用。

下面的命令按预期工作。

git reset --hard
git pull

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

答案 13 :(得分:4)

试试这个

git fetch --all 

git reset --hard origin/master

git pull origin master

强制拉动对我有用

答案 14 :(得分:4)

这对我来说可以放弃对实时远程服务器的更改并从源代码控制GitHub中拉出来:

git reset --hard
git pull origin master

答案 15 :(得分:4)

您可以将其用于覆盖文件

git checkout file_to_overwrite

答案 16 :(得分:4)

git reset --hard && git clean -df

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

答案 17 :(得分:3)

如果您想覆盖特定的更改,您需要某种方式告诉它您想要忘记哪些更改。

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

答案 18 :(得分:3)

这是我解决问题的策略。

问题陈述

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

  

错误:您对以下文件的本地更改将被覆盖   合并:请尽可能提交您的更改或存储它们   合并。

我们尝试执行commit然后pull,但它们也没有用。

<强>解决方案

我们实际上处于 dirty 阶段,因为文件位于“暂存区”a.k.a“索引区”,而有些则位于“Head Area”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 stash命令。 Stashing需要   工作目录的脏状态 - 即您修改的跟踪状态   文件和分阶段的更改 - 并将其保存在未完成的堆栈中   您可以随时重新申请的更改。

答案 19 :(得分:3)

解决此问题的最佳方法是:

git checkout -- <path/file_name>

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

git pull origin master

答案 20 :(得分:2)

如果要在服务器上保留生产更改,只需合并到新配置项即可。处理方法如下:

git stash
git pull
git stash pop

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

答案 21 :(得分:2)

我有一个特殊情况:我有一个文件,其中包含--assume-unchanged。很难找到,因为git status命令没有显示任何更改

答案 22 :(得分:1)

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

假设您的远程仓库有一些分支xyz 并且您希望将该远程仓库xyz分支合并到(复制到)本地仓库xyz分支中,

import React, { Component } from 'react';
import { profilePage } from '../UserFunctions'

export default class Profile extends Component {
    constructor() {
      super();
      //Set default message
      this.state = {
        param: null,
        message: 'Loading...',
        name: '',
        email: ''
      }
    } 

    componentDidMount() {
      let user=this.props.match.params.id;
      profilePage(user).then(res => {
        this.setState({
          name: res.data[0].fname + ' ' + res.data[0].lname,
          email: res.data[0].email,
          param: user,
        });
      })

    }
    render() {
      return (
        <div>
          <h1>Home</h1>
          <h1>{this.state.name}</h1>
          <h1>{this.state.email}</h1>
        </div>
      );
  }
}

答案 23 :(得分:1)

对我来说这是有效的:-

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

答案 24 :(得分:1)

我从主人那里拉过来时遇到了这个。

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

  1. 首先,我在我的解决方案上执行了撤消提交。
  2. 然后我做了Git拉动过程。
  3. 希望这有帮助!

答案 25 :(得分:1)

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

  

错误:合并后将覆盖对以下文件的本地更改:   myfile.js   请在合并之前提交更改或存储更改。   中止

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

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

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

  

在分支机构主机上您的分支机构落后于原产地/主设备&#39;通过4次提交,   并且可以快进。 (使用&#34; git pull&#34;更新您的本地   分支)

     

未提交的更改提交:(使用&#34; git add ...&#34;进行更新   什么将被承诺)(使用&#34; git checkout - ...&#34;丢弃   工作目录的变化)

     

修改:myfile.js

     

没有更改添加到提交(使用&#34; git add&#34;和/或&#34; git commit -a&#34;)

然后我git checkout myfile.js后跟git pull upstream master。这次git pull操作成功了。

答案 26 :(得分:0)

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

  

“在合并之前,请先提交您的更改或将其隐藏”

1。只是从

物理删除了包含插件的文件夹
rm -rf ~/.vim/bundle/plugin-folder/

2。并通过vim命令行重新安装它,
:PluginInstall!
,因为我的〜/ .vimrc包含了构建该目标的插件:

enter image description here

这将创建适当的文件夹,
,并将新软件包放入该文件夹〜./。vim / bundle / reinstalled-plugins-folder
”符号(由于 PluginUpdate 命令失败) 被更改为
到“ + ”符号,然后将 PluginUpdate 命令用于

答案 27 :(得分:0)

最简单的解决方案是:

git reset --hard && git pull

答案 28 :(得分:0)

我是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

希望这会有所帮助。

答案 29 :(得分:0)

我已经尝试并成功,在拉动之前,让我们提交你尚未提交的所有文件,然后你就不会从AS收到那些消息。

答案 30 :(得分:0)

我的解决方案是delete来自IDE外部的文件将被覆盖。然后pull。 (您随时可以备份和手动合并未跟踪的数据)

答案 31 :(得分: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

答案 32 :(得分:0)

对于Pycharm,你可以做Git - &gt; Revert然后拉。

答案 33 :(得分:0)

只需提交本地更改并合并 提交-a

答案 34 :(得分:0)

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

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