为什么我有时会看到“Entry 'filename' not uptodate”,在'git reset --hard'和'git pull'之后出现”Cannot merge.“

b1zrtrql  于 2023-05-05  发布在  Git
关注(0)|答案(7)|浏览(1093)

有时候,当我做下面的事情时...

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。

wgeznvg7

wgeznvg71#

我找到的解决这个问题的最简单的方法是:

git add .
git merge --abort
lawou6xi

lawou6xi2#

我遇到了同样的问题,我重命名了导致这个问题的文件,并做了一个git pull。它提取了丢失的文件并修复了问题。

yqyhoc1h

yqyhoc1h3#

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)
在Git 2.30.1(2021年第一季度)之前,“git stash”(man)在稀疏检出的工作树中无法正常工作。
参见commit ba359fdcommit b34ab4acommit a31e48d(01 Dec 2020)by Elijah Newren ( newren )
(由Junio C Hamano -- gitster --合并至commit 62fb47a,2021年1月15日)

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

签字人:伊莱贾·纽伦
在稀疏 checkout 中应用隐藏,特别是当用于定义稀疏性的模式在创建隐藏时和应用它时发生变化时,有许多错误。
主要的问题是,有时只部分应用了隐藏。
在大多数这种情况下,它会默默地执行此操作,不显示任何警告或错误,并且退出状态为0。
但是,在少数情况下,会显示未翻译的错误消息,并且stash应用程序会提前中止。
第一种情况是,尽管设置了SKIP_WORKTREE位,但仍存在文件,在这种情况下,显示的错误消息为:

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

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

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

34gzjxbg4#

这也可能是由于使用--skip-worktree--assume-unchanged命令而发生的,而git阻止您执行以下操作:checkoutmergerebasepull
如果我们使用以下方法,跳过的文件/目录可能不起作用:

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

检查skipped文件here的解决方案

$: 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" \;
krugob8w

krugob8w5#

当我试着逃跑的时候也遇到了同样的问题

git merge --abort

为了让它工作,我上演了我不想要的变化。一旦我这样做了,git就能够成功地撤销它们。

uubf1zoe

uubf1zoe6#

在使用assume-unchanged从索引中删除文件,然后尝试 checkout 另一个分支后,可能会发生此错误。比如说

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

然后,您可以最终进行正常的结账。

6ovsh4lw

6ovsh4lw7#

当我在一个稀疏检出的git仓库中尝试git merge --abort时,我遇到了同样的问题,没有一个解决方案对我有效。相反,我做了(假设我在分支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

相关问题