偶尔,当我执行以下操作时...
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 add .
git merge --abort
我遇到了同样的问题,我重命名了导致这个问题的文件并执行了 git pull。它提取了丢失的文件并解决了问题。
Entry 'filename' not uptodate. Cannot merge.
”的大意是:
您对工作目录中的文件进行了更改,如果要继续检出和更改到新分支,这些文件将被覆盖、删除或以其他方式丢失。
据报道该消息有时可能是“虚假的”(可能是因为“git pull
”在尝试合并之前没有刷新索引)但修复在 Git1.6.1. 但是,它可能仍然存在于 mSysGit 1.6.1 中,所以您是否在更新的 mSysGit 版本中看到同样的错误? (如 1.6.3)
commit ba359fd、commit b34ab4a、commit a31e48d(2020 年 12 月 1 日),作者 Elijah Newren (newren
)。
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
--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" \;
git merge --abort
为了让它发挥作用,我进行了我不想要的更改。一旦我这样做了,git 就能够成功地撤消它们。
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
然后您终于可以进行正常结帐了。
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