threads / discuss / 53192

Commit includes rename which was not staged, nor actually performed

Subject: Commit includes rename which was not staged, nor actually performed

## tl;dr

3 messages between Apr 8, 2020 and Apr 10, 2020.

replies: 2people: 2as markdown or json

Erwin Bonsma· Apr 8, 2020, 19:28 UTC · lore
Hi,

I encountered a problem with git version 2.24.1 (Apple Git-126). When committing changes to a single file, the commit included a rename, which was not staged, nor actually carried out.

More specifically:
> git status
On branch unwanted-rename
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
modified:   it.xliff
Untracked files:
  (use "git add <file>..." to include in what will be committed)
Pending/it.xliff.todo
> git commit -m "Some fixes"
[unwanted-rename 98098ab] Some fixes
 2 files changed, 792 insertions(+), 826 deletions(-)
 rename de.xliff => Pending/it.xliff.todo (56%)
> git log --name-only HEAD~1..HEAD
commit 98098abe5bc9c10a644009e6d185fa967941caca (HEAD -> unwanted-rename)
Author: Erwin Bonsma <eriban@users.sourceforge.net>
Date:   Wed Apr 8 20:47:09 2020 +0200
    Some fixes

Pending/it.xliff.todo it.xliff

> ls de.*
de.xliff # The file is still present
> git status
On branch unwanted-rename
Untracked files:
  (use "git add <file>..." to include in what will be committed)
Pending/it.xliff.todo # The file is still untracked
> rm Pending/it.xliff.todo
> git checkout master
> git checkout unwanted-rename
Now let's inspect the resulting revision again.
> ls de.*

ls: de.xliff: No such file or directory # The file is now gone, as commit suggested

> ls Pending/it.xliff.*

Pending/it.xliff.todo # The untracked, removed file was indeed added to source control

The changes can be reproduced on the unwanted-rename branch available at https://git.code.sf.net/p/grandperspectiv/localization

The branch includes the wrong commit. To reproduce it:
> git reset --soft HEAD~1
> git restore --staged de.xliff
> git restore --staged Pending/it.xliff.todo
> git restore de.xliff
Now working copy is ready for replay.
> git status
On branch unwanted-rename
Your branch is behind 'origin/unwanted-rename' by 1 commit, and can be
fast-forwarded.
  (use "git pull" to update your local branch)
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
modified:   it.xliff
Untracked files:
  (use "git add <file>..." to include in what will be committed)
Pending/it.xliff.todo
> git commit -m "Some fixes"
[unwanted-rename 4d1368c] Some fixes
 2 files changed, 792 insertions(+), 826 deletions(-)
 rename de.xliff => Pending/it.xliff.todo (56%)

Cheers, Erwin

Jeff King· Apr 9, 2020, 23:57 UTC · re: Erwin Bonsma · lore

Re: Commit includes rename which was not staged, nor actually performed

On Wed, Apr 08, 2020 at 09:28:09PM +0200, Erwin Bonsma wrote:
Show 5 quoted lines
> The branch includes the wrong commit. To reproduce it:
> > git reset --soft HEAD~1
> > git restore --staged de.xliff
> > git restore --staged Pending/it.xliff.todo
> > git restore de.xliff

There was a bug where git-restore didn't correctly invalidate the cache-tree extension of the index, and could cause phantom changes to end up in commits.

It was fixed by e701bab3e9 (restore: invalidate cache-tree when removing entries with --staged, 2020-01-08), which is in v2.25.1 and up.

-Peff
Erwin Bonsma· Apr 10, 2020, 06:47 UTC · re: Jeff King · lore

Re: Commit includes rename which was not staged, nor actually performed

Hi Peff,
Thanks for the analysis. I am happy to hear that it is fixed already.

Btw, version 2.24.1 with the bug is part of the latest XCode release (11.4). Hopefully a new version of XCode will be released fairly soon, and will include an updated git version. Otherwise, other macOS developers may experience (and report) similar issues. I will at least report this issue with XCode.

Cheers, Erwin

On Fri, Apr 10, 2020 at 1:57 AM Jeff King <peff@peff.net> wrote:
Show 17 quoted lines
>
> On Wed, Apr 08, 2020 at 09:28:09PM +0200, Erwin Bonsma wrote:
>
> > The branch includes the wrong commit. To reproduce it:
> > > git reset --soft HEAD~1
> > > git restore --staged de.xliff
> > > git restore --staged Pending/it.xliff.todo
> > > git restore de.xliff
>
> There was a bug where git-restore didn't correctly invalidate the
> cache-tree extension of the index, and could cause phantom changes to
> end up in commits.
>
> It was fixed by e701bab3e9 (restore: invalidate cache-tree when removing
> entries with --staged, 2020-01-08), which is in v2.25.1 and up.
>
> -Peff

← back to recent threads