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

How do I ignore an error on 'git pull' about my local changes would be overwritten by merge?

如何忽略git pull上的以下错误消息?

Your local changes to the following files would be overwritten by merge

如果我想覆盖它们呢?

我试过像git pull -f这样的东西,但没用。

明确地说,我只想覆盖特定的更改,而不是全部。


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

1
git stash save --keep-index

如果你不再需要它们,你现在可以放下那些东西:

1
git stash drop

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

  • 提交您不想覆盖的所有内容,然后对其余部分使用上面的方法。

  • 对于要覆盖的更改,请使用git checkout path/to/file/to/revert。确保文件没有通过git reset HEAD path/to/file/to/revert进行转移。


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

    1
    2
    git checkout HEAD^ file/to/overwrite
    git pull


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

    1
    2
    git reset --hard
    git pull


    这里有一个解决方案可以丢弃阶段性的更改:

    1
    2
    git reset file/to/overwrite
    git checkout file/to/overwrite


    您可以在合并之前提交您的更改,也可以将其存储:

  • git stash save
  • git merge origin/master
  • git stash pop

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

    1
    git checkout -- <file>

    然后您可以用最新版本覆盖文件,只需执行以下操作:

    1
    git pull


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

  • git checkout master
  • git fetch origin
  • git reset --hard origin/master
  • git checkout -b newbranch

  • 在最近的git中,您可以在pull命令上添加-r/--rebase,以便在获取后将当前分支重新定位到上游分支的顶部。警告应该消失,但有一个风险,你会得到一些冲突,你需要解决。

    或者,您可以强制签出不同的分支,然后再次返回到master,例如:

    1
    2
    git checkout origin/master -f
    git checkout master -f

    然后像往常一样再拉一次:

    1
    git pull origin master

    使用此方法可以节省存储(git stash和潜在的权限问题、重新存储文件(git reset HEAD --hard和删除文件(git clean -fd等)的时间,而且更容易记住。


    有时,这些都不起作用。令人恼火的是,由于我认为的事情,将工作删除文件,然后拉。不是我推荐这个解决方案,但是如果文件不存在,Git不会毫无用处地通知您,您的更改(甚至可能不是更改)将被覆盖,并允许您继续。

    自担风险使用。


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

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

    1
    2
    git reset file/to/overwrite
    git checkout file/to/overwrite

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

    1
    2
    3
    git stash
    git pull
    git stash pop

    另外,这个问题可能是因为您所在的分支没有与主分支合并。


    埃多克斯一〔11〕没有为我工作。

    下面的命令按预期工作。

    1
    2
    git reset --hard
    git pull

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


    这对我来说很有用,可以放弃实时远程服务器上的更改并从源代码管理github中提取:

    1
    2
    git reset --hard
    git pull origin master

    您可以将其用于覆盖文件

    1
    git checkout file_to_overwrite

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

    问题陈述

    我们需要在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,但它们也不起作用。

    解决方案

    实际上,我们正处于肮脏的阶段,因为文件在"临时区域"a.k.a"索引区域"中,而有些文件在"头区域"a.k.a"本地Git目录"中。我们想从服务器中提取更改。

    请查看此链接,以清楚地了解git的不同阶段的信息:git阶段

    我们遵循以下步骤

    • git stash(这使我们的工作目录变得干净。您的更改按git存储在堆栈中)。
    • git pull origin master(从服务器中提取更改)
    • git stash apply(应用堆栈的所有更改)
    • git commit -m 'message'(承诺变更)
    • git push origin master(将更改推送到服务器)
    • git stash drop(放下堆栈)

    让我们理解你需要藏匿的时间和原因

    如果您处于不干净的状态,意味着您正在对文件进行更改,然后由于任何原因,您被迫拉入或切换到另一个分支进行一些非常紧急的工作,因此此时在提交更改之前,您无法拉入或切换。以东十一〔九〕司令部是来帮忙的。

    摘自《程序》第2版:

    Often, when you’ve been working on part of your project, things are in
    a messy state and you want to switch branches for a bit to work on
    something else. The problem is, you don’t want to do a commit of
    half-done work just so you can get back to this point later. The
    answer to this issue is the git stash command. Stashing takes the
    dirty state of your working directory – that is, your modified tracked
    files and staged changes – and saves it on a stack of unfinished
    changes that you can reapply at any time.


    解决这个问题的最佳方法是:

    1
    git checkout -- <path/file_name>

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

    1
    git pull origin master


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

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


    git reset --hard && git clean -df

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


    我有一个特殊的案例:我有一个文件——假设没有改变。很难定位,因为git status命令没有显示任何变化。


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

    1
    2
    3
    git stash
    git pull
    git stash pop

    也许你没有执行所有的操作。你知道下一步该怎么做。


    我在从主人那里拉车时遇到了这个。

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

  • 首先,我对解决方案执行了撤消提交。
  • 然后我做了git-pull过程。
  • 希望这有帮助!


    我忽略了我的报告中的一个文件,当我执行git pull upstream master时,我得到了以下错误:

    error: Your local changes to the following files would be overwritten by merge:
    myfile.js
    Please, commit your changes or stash them before you can merge.
    Aborting

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

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

    然后我做了git status,得到了这个信息

    On branch master Your branch is behind 'origin/master' by 4 commits,
    and can be fast-forwarded. (use"git pull" to update your local
    branch)

    Changes not staged for commit: (use"git add ..." to update
    what will be committed) (use"git checkout -- ..." to discard
    changes in working directory)

    modified: myfile.js

    no changes added to commit (use"git add" and/or"git commit -a")

    然后我做了git checkout myfile.js,接着是git pull upstream master。这次git pull操作成功。


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

    "Please commit your changes or stash them before you merge"

    1。只是物理删除了包含插件的文件夹

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

    2。并从VIM命令行重新安装:plugininstall!因为my~/.vimrc包含了将插件构建到该目标的说明:

    enter image description here

    这创建了正确的文件夹,并将新的包放入该文件夹~./.vim/bundle/reinstalled plugins文件夹。"!"签名(由于pluginupdate命令不成功)被改为"+"符号,之后pluginupdate命令生效。


    如果此错误是由行尾引起的,

    1
    2
    git add
    git checkout mybranch

    会工作。我不太清楚为什么它会起作用。


    对于pycharm,您可以执行git->还原然后拉。


    如果使用git-lfs并且文件指针被实际文件覆盖,也可能发生此消息。

    然后使用:

    1
    2
    3
    git stash
    git lfs migrate import
    git pull

    我案例的全部输出

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    λ 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


    我已经尝试过了,而且它成功地完成了,在提取之前,让提交您尚未提交的所有文件,然后您将不会从AS收到这些消息。