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

mae 503 git git-stash git-pull

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

合并将覆盖对以下文件的本地更改

如果我覆盖它们怎么办?

我尝试了类似的东西git pull -f,但没有任何作用.

要清楚,我只想覆盖特定的变化,而不是一切.

Daniel Hilga.. 381

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

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.

  • 不行.之后引发相同的错误. (5认同)
  • 诀窍是使用`git checkout HEAD ^ path/to/file/to/revert`.使用**HEAD ^**完全不同. (2认同)
  • @ user1132363:这签出了以前的版本,而不是当前签入的版本。我不认为这是正确的方法。 (2认同)

mae.. 282

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

git checkout HEAD^ file/to/overwrite
git pull

  • 为什么HEAD ^而不是HEAD? (30认同)
  • HEAD ^是HEAD ^ 1的缩写,实质上是指HEAD之前的一次提交.你也可以在那之前为提交做HEAD ^ 2.有关更多信息,请参阅http://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Ancestry-References和http://stackoverflow.com/questions/1955985/what-does-the-插入符号字符均值. (18认同)
  • This worked for me. Could you expand on this answer, ie.what is this actually doing? (6认同)
  • 请解释一下这在答案中的作用 (4认同)
  • 它正在删除本地更改,恢复到HEAD引用,这可能是主分支中的最后一次提交 (3认同)

kravits88.. 194

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

git reset --hard
git pull

  • SO需要在他们的排名算法上工作,到目前为止找到一个工作的,高评价的答案很麻烦. (4认同)

Aftershock.. 72

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

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

  • 令人讨厌的是,如果感知到的差异来自于文件在签出时更改了换行符这一事实,则无法解决问题. (11认同)
  • 当本地文件未跟踪时,这不起作用 (3认同)

Suneel Kumar.. 60

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

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

  • 重点是,你不应该这样做.只需拿走当前的HEAD材料并将其合并进去!这很简单,Git,所有其他VCS都是这样做的......但不是.Linus不得不使用起来很烦人. (9认同)

pabloasc.. 42

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

git checkout -- <file>

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

git pull

  • 是的,它确实:"如果我想覆盖它们怎么办?" (6认同)

小智.. 17

如果您的存储库包含一些从master以下位置删除的文件:

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


Jeremy Holov.. 11

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

使用风险由您自己承担.


Khemraj.. 9

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

下面的命令按预期工作。

git reset --hard
git pull

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


kenorb.. 8

在最近的Git中,您可以添加-r/ --rebaseon pull命令在获取后在上游分支的顶部重新绑定当前分支.警告应该消失,但是您可能会遇到一些需要解决的冲突.


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

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

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

git pull origin master

使用此方法可以节省您从stashing(git stash)和潜在的权限问题,重置文件(git reset HEAD --hard),删除文件(git clean -fd)等的时间.此外,它更容易记住.


BSB.. 7

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

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

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

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

git stash
git pull
git stash pop

此问题也可能是因为您处于未与主分支合并的分支上.


归档时间:

查看次数:

658868 次

最近记录:

9 月,3 周 前