Git拉:错误:inputfoo不uptodate。 无法合并

我试图从远程分支更新我的回购,并继续得到这个错误,当我做一个“混帐拉”。 我没有做任何地方的改变,即使我有,我也不需要保留它们。

我试过了:

git reset –hard

我也遇到同样的问题

似乎工作的唯一的东西是删除有问题的文件,并再次尝试一个git拉。

我也尝试过“git stash”,然后是“git pull”。 不行。

编辑:使用PortableGit-1.6.4-preview20090729所以任何以前的虚假错误错误应该修复。

有几个方法来解决这个问题,但我发现git暗藏对我有好处。 它暂时将您的本地更改放到另一个地方。 然后你可以拉,抓住最新的变化。 然后你可以回到你的本地变化。

像这样:

$ git pull ... ... file your_file.rb not up to date, cannot merge. $ git stash $ git pull $ git stash pop 

这种问题通常是由于试图从一个有两个不同的文件名的仓库中引起的。 如果你使用的是FAT,NTFS以不区分大小写的模式(基本上是任何时候在Windows下使用),或者HFS +以不区分大小写的模式,并且有两个文件“foobar”和“FOOBAR”,那么Git会看到两个不同的文件,但文件系统只会看到一个,这会造成各种问题。 Git会检出“FOOBAR”,然后检出文件系统看到的“foobar”,只是简单地将“FOOBAR”的内容replace掉。 现在Git看来,“FOOBAR”已经被“foobar”的内容所取代了,而“foobar”已经不存在了。

这个基本问题有两种不同的performanceforms。 一个是当你的仓库实际上包含两个文件,只有大小写不同。 在这种情况下,您需要处理区分大小写的文件系统,否则您需要编辑存储库以确保不会发生此类冲突; 不区分大小写的文件系统根本无法存储此存储库的内容。

您可以解决的另一种情况是发生重命名更改大小写的情况下。 比方说,例如,Git存储库包含从“示例”到“示例”的重命名。 在Git检出新版本之前,它会尝试检查以确保它不覆盖磁盘上的某个现有文件。 因为它认为“example”是一个新的文件名,它会询问文件系统是否存在,文件系统将会看到“EXAMPLE”并且说是,所以Git会拒绝检查新版本,因为它认为它将被覆盖未跟踪的文件。 在这种情况下,如果没有你关心的本地修改,一个简单的git reset --hard <revision-to-checkout>通常就足以让你解决问题和修改新的版本。 只要尝试记住不要将文件重命名为其他名称,只有在不区分大小写的文件系统时才会有所不同,因为这会导致类似的问题。

一般来说,这意味着你的本地文件没有被提交到你的本地仓库。 你也可以看到这个stackoverflow的问题了解更多的细节。

为了进一步阐述@Brian Campbell的post(因为重置硬盘也不行),我想指出一个阻止我的边缘案例。

我已经将文件OldFile移动到不同的文件夹,并将其重命名为NewFile 。 然后,我将该文件标记为assume-unchanged

这阻止了我转换分支,并没有存储保存或承诺推。 问题是我没有提交此文件更改与一个新的名称之前设置的assume-unchanged标志。 所以我把它设置为no-assume-unchanged ,保留,然后将其设置为assume-unchanged我可以再次切换分支。

这也可能是文件权限问题。 Git也是对它们进行版本控制,除非configuration文件另有说明。 只是为那些几乎没有类似问题的人添加这个答案。

值得一试:

你可以设置,只是为了这个更新,将configuration参数core.trustctime设置为false?

 core.trustctime 

如果为false,索引和工作副本之间的ctime差异将被忽略; 当inode更改时间被Git(文件系统搜寻器和一些备份系统)之外的某些东西定期修改时,这是有用的。

我看到一个类似的问题(Windows 10):我在branchA ,想要去master 。 我有一些uncommited更改,所以首先我git stash然后git checkout -f master但我仍然得到Entry 'fileName' not uptodate. Cannot merge Entry 'fileName' not uptodate. Cannot merge

git status没有显示任何提交。

最后,我只是手动删除文件 ,我可以去其他分支(这当然使我的文件回来),所以我想有一个在git内的错误的地方。