Why do I sometimes see an “Entry 'filename' not uptodate. Cannot merge.” after a 'git reset --hard' and a 'git pull'?

て烟熏妆下的殇ゞ 提交于 2019-12-03 07:06:29

问题


Occasionally, when I do the following...

git reset --hard
HEAD is now at 0123abde comment is here
git pull
Updating 0123abde..456789fa

I get the error...

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

The only workaround I have found is to 'git reset --hard', delete the offending file(s) then do 'git pull'. That doesn't seem right to me. Shouldn't a hard reset remove any and all local changes thus allowing me to pull the latest without any merge issues? Am I using git wrong? :)

This is on a CI machine so any changes here are unwanted. I'm using git version 1.6.1.9.g97c34 on Windows Vista.


回答1:


The general idea behind "Entry 'filename' not uptodate. Cannot merge." is:

You have changes to files in your working directory that will be overwritten, removed or otherwise lost if the checkout and change to the new branch were to proceed.

It has been reported that this message could be "spurious" at time, (potentially because "git pull" did not refresh the index before trying to merge) but the fix was in Git1.6.1.
However, it may still be in mSysGit 1.6.1, so do you see the same error with a more recent mSysGit version ? (like 1.6.3)




回答2:


I was having the same issue and I renamed the file which was causing this and did a git pull. It pulled that missing file and fixed the issue.




回答3:


The easiest solution I have found to this problem is:

git add .
git merge --abort



回答4:


I had this same issue when I was trying to run

git merge --abort

To get it to work, I staged the changes I didn't want. Once I did that, git was able to successfully undo them.




回答5:


This also might happen due to using --skip-worktree or --assume-unchanged commands and git prevent you to do: checkout, merge, rebase or pull.

The skipped files/directory might not work if we're doing the following approach:

  • git stash
  • git merge --abort, &
  • git rm --cached this also doesn't work for the skipped file this command will throw: fatal: pathspec [file] did not match any files instead

Check for the solution for skipped files here

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

Optional if you want to remove the skipped or untracked dir/files on your local

$: git reset --hard

If none of the above commands fix the issue, you just have to undo the file from skipped tree, e.g:

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

If you skipped the directory, just go here for detail how to skip/undo recursively, e.g:

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


来源:https://stackoverflow.com/questions/878554/why-do-i-sometimes-see-an-entry-filename-not-uptodate-cannot-merge-after-a

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!