我正在尝试从远程分支更新我的仓库,并在执行“ git pull”时不断出现此错误。我没有进行任何本地更改,即使我进行了更改,也不需要保留它们。
我试过了:
git reset --hard
我遇到了同样的问题
似乎唯一可行的方法是删除有问题的文件,然后再次尝试git pull。
我也试过git stash了git pull。不行
编辑:使用PortableGit-1.6.4-preview20090729,以便修复以前任何带有虚假错误的错误。
我正在尝试从远程分支更新我的仓库,并在执行“ git pull”时不断出现此错误。我没有进行任何本地更改,即使我进行了更改,也不需要保留它们。
我试过了:
git reset --hard
我遇到了同样的问题
似乎唯一可行的方法是删除有问题的文件,然后再次尝试git pull。
我也试过git stash了git pull。不行
编辑:使用PortableGit-1.6.4-preview20090729,以便修复以前任何带有虚假错误的错误。
git rm --cached learned/tests/temp_funcs.py-由于我始终希望文件保留在“git rm --cached未跟踪的文件”列表中,因此在这种情况下,请解除阻止。
--abort。除了删除有问题的文件外,所有建议的解决方案都不允许我中止。
Answers:
有两种方法可以解决此问题,但是我发现git stash对我有用。它暂时将您的本地更改放到另一个地方。然后,您可以拉动以获取最新的更改。然后您可以取回本地更改。
像这样:
$ git pull
...
...
file your_file.rb not up to date, cannot merge.
$ git stash
$ git pull
$ git stash pop
git rm --cached完整评论:stackoverflow.com/questions/1248029/…–
如果您更新索引以忽略某些文件,则可能会发生这种情况:
git update-index --assume-unchanged <file>
然后例如签出其他分支:
git checkout <branch>
> error: Entry '<file>' not uptodate. Cannot merge.
强制刷新索引可解决以下问题:
git update-index --really-refresh
<file>: needs update
其次是:
git reset --hard
然后一切应该恢复正常。
git rm --cached learned/tests/temp_funcs.py-由于我始终希望文件保留在“git rm --cached未跟踪的文件”列表中,因此在这种情况下,请解除阻止。
git update-index --really-refresh是一件遗失!做得好,这很难找到
这类问题通常是由于尝试从具有两个仅大小写不同的文件名的存储库中提取而引起的。如果您使用的是FAT,不区分大小写模式下的NTFS(实际上是在Windows下任何时候使用它)或不区分大小写模式的HFS +,并且有两个文件“ foobar”和“ FOOBAR”,那么Git将看到两个不同的文件文件,但文件系统只会看到一个,这将导致各种问题。Git将先检出“ FOOBAR”,然后检出“ foobar”,文件系统将其视为简单地替换了“ FOOBAR”的内容,但将其保留在原位。现在到Git,看来“ FOOBAR”已替换为“ foobar”的内容,“ foobar”消失了。
这个基本问题有两种不同的表现形式。一种是您的存储库实际上包含两个仅在大小写上不同的文件。在这种情况下,您需要在区分大小写的文件系统上工作,或者需要编辑存储库以确保不会发生此类冲突。不区分大小写的文件系统根本无法存储该存储库的内容。
您可以解决的另一种情况是,重命名发生时更改了文件的大小写。例如,假设Git存储库包含从“ EXAMPLE”到“ example”的重命名。在Git签出新版本之前,它将尝试检查以确保它不会覆盖磁盘上已有的某些现有文件。由于它认为“ example”是新文件名,因此它将询问文件系统是否存在,并且文件系统将看到“ EXAMPLE”并说“是”,因此Git会拒绝签出新版本,因为它认为它将被覆盖未跟踪的文件。在这种情况下,如果您没有关心的本地更改,则简单git reset --hard <revision-to-checkout>通常足以使您克服问题并适应新的修订要求。只是要记住不要将文件重命名为仅在不区分大小写的文件系统上使用的大小写不同的其他名称,因为这会引起类似的问题。
要进一步详细说明@Brian Campbell的帖子(因为也很难进行重置),我想指出一个阻碍我前进的极端情况。
我已经将文件移到另一个文件OldFile夹并重命名了NewFile。然后,我将该文件标记为assume-unchanged。
这阻止了我切换分支,也没有保存或承诺推送的存储。问题是在设置assume-unchanged标志之前,我没有使用新名称提交此文件更改。所以我将其设置为no-assume-unchanged,提交,然后将其设置为,然后assume-unchanged可以再次切换分支。
checkout -f,它也会失败。
一般来说,这意味着您在本地文件中所做的更改尚未提交到本地存储库。您还可以查看此stackoverflow问题以获取更多详细信息。
我遇到了类似的问题(Windows 10):我在打开branchA并想转到master。我有一些未提交的更改所以首先我git stash然后git checkout -f master,但我还是得到了Entry 'fileName' not uptodate. Cannot merge。
git status 没有显示任何要提交的内容。
最终,我只是手动删除了文件,并且能够转到另一个分支(这当然使我的文件回来了),所以我猜git中某个地方存在错误。
.gitignore文件错误!即使我没有对其进行任何更改,并且git也不允许我“存储”它(因为没有本地更改,,!)。因此,我将.gitignore文件移出了存储库(作为一种“备份”),然后执行git reset --hard,将存储库“修复”为正常状态。
git status向我显示了哪个文件已更改,并提示我可以使用git restore myFile而不是删除它来工作。
值得一试:
您能否仅为此更新设置config参数core.trustctime为false?
core.trustctime
如果为false,则索引和工作副本之间的ctime差异将被忽略;否则为false。当Init更改时间由Git外部的某些文件(文件系统搜寻器和某些备份系统)定期修改时很有用。