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

Jam*_*ski 17 git merge pull reset

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

git reset --hard
HEAD is now at 0123abde comment is here
Run Code Online (Sandbox Code Playgroud)
git pull
Updating 0123abde..456789fa
Run Code Online (Sandbox Code Playgroud)

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

error: Entry 'filename' not uptodate. Cannot merge.
Run Code Online (Sandbox Code Playgroud)

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

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

小智 15

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


Von*_*onC 12

" Entry 'filename' not uptodate. Cannot merge." 背后的一般思想是:

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

报道,此消息可能在时间上"虚假",(可能是因为" git pull" 在尝试合并之前没有刷新索引)但修复程序在Git1.6.1中.
但是,它可能仍然在mSysGit 1.6.1中,所以你看到更新的mSysGit版本会出现同样的错误吗?(如1.6.3)


小智 6

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

git add .
git merge --abort
Run Code Online (Sandbox Code Playgroud)


moc*_*dwi 6

这也可能发生因使用--skip-worktree--assume-unchanged命令和git阻止你做:checkoutmergerebasepull

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

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

在此处检查skipped文件的解决方案

$: git update-index --really-refresh
<file>: needs update
Run Code Online (Sandbox Code Playgroud)

如果要删除skipped本地或未跟踪的目录/文件,则可选

$: git reset --hard
Run Code Online (Sandbox Code Playgroud)

如果以上命令都没有解决问题,您只需从skipped树中撤消文件,例如:

$: git update-index --no-skip-worktree [file]
Run Code Online (Sandbox Code Playgroud)

如果您skipped是目录,请到此处详细了解如何递归跳过/撤消,例如:

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