为什么我有时会看到“条目'文件名'不是最新的。无法合并。”在'git reset --hard'和'git pull'之后?

时间:2009-05-18 16:24:32

标签: git merge reset pull

偶尔,当我做以下事情时......

git reset --hard
HEAD is now at 0123abde comment is here
git pull
Updating 0123abde..456789fa

我收到了错误......

error: Entry 'filename' not uptodate. Cannot merge.

我找到的唯一解决方法是'git reset --hard',删除有问题的文件,然后执行'git pull'。这对我来说似乎不对。不应该硬重置删除任何和所有本地更改,从而允许我拉出最新的没有任何合并问题?我使用git错了吗? :)

这是在CI计算机上,因此此处的任何更改都是不需要的。我在Windows Vista上使用git版本1.6.1.9.g97c34。

6 个答案:

答案 0 :(得分:13)

我遇到了同样的问题,我重命名了导致这个问题的文件,然后做了一个git pull。它删除了丢失的文件并解决了问题。

答案 1 :(得分:11)

Entry 'filename' not uptodate. Cannot merge.”背后的一般概念是:

  

您对工作目录中的文件进行了更改,如果要继续结帐和更改新分支,这些文件将被覆盖,删除或以其他方式丢失。

has been reported此消息可能是“假的”,(可能是因为“git pulldid not refresh the index在尝试合并之前)但修复程序是在Git1.6.1中。登记/> 但是,它可能仍然在mSysGit 1.6.1中,所以你看到更新的mSysGit版本会出现同样的错误吗? (如1.6.3)

答案 2 :(得分:3)

我找到的最简单的解决方案是:

git add .
git merge --abort

答案 3 :(得分:1)

这也可能由于使用--skip-worktree--assume-unchanged命令而发生,而git阻止您执行以下操作:checkoutmergerebase或{{1 }}。

如果采用以下方法,则跳过的文件/目录可能不起作用:

  • pull
  • git stash和&
  • git merge --abort不适用于此命令将抛出的git rm --cached文件:skipped

检查fatal: pathspec [file] did not match any files个文件here的解决方案

skipped

如果要删除本地上的$: git update-index --really-refresh <file>: needs update 或未跟踪的目录/文件,则为可选

skipped

如果以上命令均不能解决问题,则只需从$: git reset --hard 树中撤消该文件,例如:

skipped

如果您$: git update-index --no-skip-worktree [file] 目录,请直接转到here,详细了解如何递归地跳过/撤消操作,例如:

skipped

答案 4 :(得分:0)

我尝试跑步时遇到了同样的问题

git merge --abort

为使其正常工作,我上演了不需要的更改。一旦这样做,git就可以成功撤消它们。

答案 5 :(得分:0)

从假设不变的索引中删除文件,然后尝试签出另一个分支后,可能会发生此错误。 例如,

git checkout master

甚至

git checkout -f master

导致错误:

error: Entry 'gradle/apk.gradle' not uptodate. Cannot merge.

解决方案是使用以下命令将文件返回索引:

git update-index --no-assume-unchanged gradle/apk.gradle

然后,您终于可以正常进行结帐了。