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

问题描述 投票:0回答:7

偶尔,当我执行以下操作时...

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”。这对我来说似乎不对。硬重置不应该删除任何和所有本地更改,从而允许我在没有任何合并问题的情况下提取最新版本吗?我用错了吗? :)

这是在 CI 机器上,所以这里的任何更改都是不需要的。我在 Windows Vista 上使用 git 版本 1.6.1.9.g97c34。

git merge reset pull
7个回答
45
投票

我发现这个问题最简单的解决方案是:

git add .
git merge --abort

22
投票

我遇到了同样的问题,我重命名了导致这个问题的文件并执行了 git pull。它提取了丢失的文件并解决了问题。


14
投票

Entry 'filename' not uptodate. Cannot merge.
”的大意是:

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

据报道该消息有时可能是“虚假的”(可能是因为“git pull

在尝试合并之前没有刷新索引)但修复在 Git1.6.1. 但是,它可能仍然存在于 mSysGit 1.6.1 中,所以您是否在更新的 mSysGit 版本中看到同样的错误? (如 1.6.3)


在 Git 2.30.1(2021 年第一季度)之前,“

git stash

man 在稀疏检查的工作树中运行不佳。

参见

commit ba359fdcommit b34ab4acommit a31e48d(2020 年 12 月 1 日),作者 Elijah Newren (newren

)

(由 Junio C Hamano 合并 -- gitster
 --
commit 62fb47a,2021 年 1 月 15 日)

t7012
:添加一个测试用例,演示在稀疏结帐中隐藏应用错误

签字人:Elijah Newren

在稀疏结帐中应用存储,特别是当用于定义稀疏性的模式在创建存储和应用存储之间发生变化时,存在许多错误。

主要问题是有时只应用了部分存储。

在大多数此类情况下,它会静默执行,不会显示任何警告或错误,并且退出状态为 0。

但是,在某些情况下,会显示未翻译的错误消息并且存储应用程序会提前中止。

第一种情况是尽管设置了

SKIP_WORKTREE

 位,但仍有文件存在,在这种情况下,显示的错误消息是:

error: Entry 'PATHNAME' not uptodate. Cannot merge.
另一种情况是当 stash 包含要添加到工作树的新文件时;在这种情况下,代码提前中止但仍然部分应用了存储,并显示以下错误消息:

error: NEWFILE: does not exist and --remove not passed fatal: Unable to process path NEWFILE

    

14
投票
这也可能是由于使用

--skip-worktree

--assume-unchanged
 命令而 git 阻止您执行以下操作:
checkout
merge
rebase
pull

如果我们执行以下方法,跳过的文件/目录可能不起作用:

  • git stash
    
    
  • git merge --abort
    , &
  • git rm --cached
     这也不适用于该命令将抛出的 
    skipped
     文件: 
    fatal: pathspec [file] did not match any files
     instead
检查

skipped

文件的解决方案
这里

$: git update-index --really-refresh <file>: needs update

如果您想删除本地

skipped

或未跟踪的目录/文件,则可选

$: git reset --hard

如果以上命令都不能解决问题,您只需从

skipped

树中撤消文件,例如:

$: git update-index --no-skip-worktree [file]

如果您

skipped

目录,只需转到
here了解如何递归跳过/撤消的详细信息,例如:

find . -maxdepth 1 -type d \( ! -name . \) -exec bash -c "cd '{}' && pwd && git ls-files -z ${pwd} | xargs -0 git update-index --skip-worktree" \;
    

4
投票
我在尝试运行时遇到了同样的问题

git merge --abort

为了让它发挥作用,我进行了我不想要的更改。一旦我这样做了,git 就能够成功地撤消它们。


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

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
然后您终于可以进行正常结帐了。


0
投票
当我尝试

git merge --abort

 在一个稀疏检查的 git repo 中时,我遇到了同样的问题,没有一个解决方案对我有用。
相反,我做了(假设我在分支
my_branch

git checkout -b BAD_BRANCH # Switch to another branch git add -u # Stage all the mess git commit -m "BAD COMMIT" # Commit all the mess git checkout my_branch # Go back to my branch git branch -D BAD_BRANCH # Delete branch with all the mess
    
© www.soinside.com 2019 - 2024. All rights reserved.