git说文件“需要更新”是什么意思?


156

我一生都找不到git有时会不时出现的“ [文件]:需要更新”消息的任何体面的解释。甚至官方的git FAQ都将其解释为TODO。如果有人可以解释A)这意味着什么;B)如何解决,我将非常感谢。


1
好问题,正如你所说的连GitFaq没有一个答案:git.wiki.kernel.org/index.php/...
贾斯汀·西尔


1
您能确切地说出是哪个命令产生的吗?以及哪个版本的Git?我试图将它们从用户界面中删除,所以最近的Git不应告诉您这一点,除非在我忘记的地方;-)。
Matthieu Moy 2015年

Answers:


108

这意味着您正在尝试从某处合并更改,但是更改包括对脏文件的修改(当前在工作树中进行了修改)。您需要提交未完成的更改,或者存储它们,提取/重新设置/合并/进行任何更新操作,然后取消存储


4
实际上不是拉动-合并是拉动的一部分。如果您尝试合并具有相同问题的本地分支,则会看到相同的错误,并且我认为其他合并操作(应用,隐藏应用...)会打印类似的错误(如果不一致)。
卡斯卡贝尔

嗯谢谢 这实际上是有道理的。我想我需要确保在签出其他分支之前提交更改。
rofrankel 2010年

7
如果它有助于搜索结果,我还会遇到这个问题,尝试git svn rebase使用肮脏的工作副本。保存,重新设置,隐藏流行,一切都与世界同步。
亚当·塔特尔

1
文件本身可能不会更改-即使更改文件属性(如权限)也可能导致这种情况。
chiborg

22

正如其他人指出的那样,需求更新消息意味着文件已变脏,或者换句话说,文件已过时。但是,与其执行重置并重新开始,不如简单地进行操作git status,然后git add <file> 其包含在更改后的列表中即可。因为您之前可能已经添加了文件,但是随后对其进行了更改。这发生在我身上,并且通过简单的操作,add我解决了问题。


7

登录到生产/目标服务器,cd到包含您的应用程序的目录,然后执行这两个命令。

1.重置为最新版本

警告,这将删除您的所有更改:

git reset --hard HEAD

2.拉出更改

git pull origin master


1
[git reset --hard HEAD]为我工作。我是从Windows共享驱动器提交的,但是我的Ubuntu目录无法反映我刚刚所做的提交,即使它是同一文件夹(Z:映射到/ var / www / html /)。运行此命令后,[git status]和[git pull]现在都显示为最新。
基思DC

这也是对我有用的解决方案。我试图在Windows上使用SourceTree使用git子树,但在此过程中搞砸了。
Artem Russakovskii 2015年

3

就像所链接的其他问题的答案所说,该消息仅表示您有重要的更改。例如,如果您使用进行了一些更改git add,那么您也会得到此信息,然后改变主意并重新git reset HEAD file开始。


2
git reset HEAD file导致出现相同的消息
专家

2

当变基过程对不在目标分支上的文件进行其他更改时,可能会发生此错误。

对我来说,最棘手的部分是我的仓库中的.gitattributes文件。在另一个分支中添加了新的二进制文件类型,但是它的处理被强制为文本文件。当git从仓库中下载文件时,EOL(实际上是二进制值字节)被替换了-导致二进制差异。

添加新条目以二进制形式处理新文件类型,然后重试整个过程为我解决了问题。


1

就我而言,我不断

assets/ElipseThree.png: needs update
You must edit all merge conflicts and then
mark them as resolved using git add

我的目录中有这些文件,但在当前分支中已将其重命名。所以要解决,我跑了

$ git mv assets/ElipseThree.png assets/elipseThree.png
$ git add assets/elipseHalfFull.png 
$ git rebase --continue

它让我继续

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.