Re: git rebase -i (and gitk) problem in Windows/Cygwin
From: Hannu Koivisto <hidden>
Date: 2016-06-15 22:46:37
Hannu Koivisto [off-list ref] writes:
Greetings, With current git.git (1.6.2.2.446.gfbdc0) built for Cygwin, running on Windows XP, executing the following commands... mkdir test cd test git init echo initial > kala.c echo initial > sur.c git add *.c git commit -m "Initial commit." echo addition >> kala.c git commit -a -m "Kala addition 1." echo addition >> sur.c git commit -a -m "Sur addition." echo addition2 >> kala.c git commit -a -m "Kala addition 2." git rebase -i HEAD~3 ...and moving commit "Kala addition 2." right after "Kala addition 1." and marking it to be squashed results to ---8<---------------------------------------------------- error: Entry 'kala.c' not uptodate. Cannot merge. fatal: merging of trees 787519579d90e45dfee00189985fa8c92f56be8f and 83f124d88764604c7d348e73103168bd98665e56 failed Could not apply 14eb9c7... Kala addition 2. ---8<---------------------------------------------------- rebase -i used to work fine earlier, but unfortunately I don't remember which version I used back then (1.6.something). This problem doesn't occur on Linux with the same git version.
For what it's worth, I managed to bisect the rebase problem down to
commit e4c7292353dbef39feac1c6a60c5cde9140520a6 by Kjetil Barvik:
write_entry(): use fstat() instead of lstat() when file is open
Currently inside write_entry() we do an lstat(path, &st) call on a
file which have just been opened inside the exact same function. It
should be better to call fstat(fd, &st) on the file while it is open,
and it should be at least as fast as the lstat() method.
I don't know if it might be related (I suppose it could be because of that "...not uptodate" message) but I also see the following behaviour with gitk: * I change a file in workspace. * I "Update" in gitk - I see the change. * I undo the change. * I "Update" in gitk - I see an empty change. * "Reload" doesn't help - I still se an empty change. * I run "git status" on the command line and then select "Update" in gitk -> now the change disappears.
-- Hannu