threads / bug / 50562

bug - git version 2.20.1.windows.1

Subject: bug - git version 2.20.1.windows.1

## tl;dr

2 messages between Feb 22, 2019 and Feb 22, 2019.

replies: 1people: 2as markdown or json

Krzysztof Sobierajczyk· Feb 22, 2019, 13:26 UTC · lore

for example, I've created a simple repository. Containing two files ('to rename.txt' and 'to remove.txt'). I wanted to prepare for the index changing the name of the first file and deleting the second file. what git shows you looks wrong. Please check the four instructions

$ git add . $ git commit -m " first commit" $ git mv to\ rename.txt new\ name.txt $ git rm to\ remove.txt

SAMPLE REPOSITORY AND TEST
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        to remove.txt
        to rename.txt
nothing added to commit but untracked files present (use "git add" to track)

ksobierajczyk@KME43 MINGW64 /d/Simple repository (master) $ git add .

ksobierajczyk@KME43 MINGW64 /d/Simple repository (master) $ git status On branch master

No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   to remove.txt
        new file:   to rename.txt
ksobierajczyk@KME43 MINGW64 /d/Simple repository (master)
$ git commit -m " first commit"
[master (root-commit) 46011e3]  first commit
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 to remove.txt
 create mode 100644 to rename.txt

ksobierajczyk@KME43 MINGW64 /d/Simple repository (master) $ git status On branch master nothing to commit, working tree clean

ksobierajczyk@KME43 MINGW64 /d/Simple repository (master) $ ls -all total 8 drwxr-xr-x 1 ksobierajczyk 1049089 0 lut 22 13:40 ./ drwxr-xr-x 1 ksobierajczyk 1049089 0 lut 22 13:38 ../ drwxr-xr-x 1 ksobierajczyk 1049089 0 lut 22 13:41 .git/ -rw-r--r-- 1 ksobierajczyk 1049089 0 lut 22 13:38 'to remove.txt' -rw-r--r-- 1 ksobierajczyk 1049089 0 lut 22 13:40 'to rename.txt'

ksobierajczyk@KME43 MINGW64 /d/Simple repository (master)
$ git mv to\ rename.txt new\ name.txt
                        <--- rename
ksobierajczyk@KME43 MINGW64 /d/Simple repository (master)
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
        renamed:    to rename.txt -> new name.txt
                <--- rename is ok

ksobierajczyk@KME43 MINGW64 /d/Simple repository (master) $ ls -la total 8 drwxr-xr-x 1 ksobierajczyk 1049089 0 lut 22 13:42 ./ drwxr-xr-x 1 ksobierajczyk 1049089 0 lut 22 13:38 ../ drwxr-xr-x 1 ksobierajczyk 1049089 0 lut 22 13:42 .git/ -rw-r--r-- 1 ksobierajczyk 1049089 0 lut 22 13:40 'new name.txt' -rw-r--r-- 1 ksobierajczyk 1049089 0 lut 22 13:38 'to remove.txt'

ksobierajczyk@KME43 MINGW64 /d/Simple repository (master)
$ git rm to\ remove.txt
                                   <---- remove file
ksobierajczyk@KME43 MINGW64 /d/Simple repository (master)
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
        renamed:    to remove.txt -> new name.txt
                     <------------  AND FAIL
        deleted:    to rename.txt
ksobierajczyk@KME43 MINGW64 /d/Simple repository (master)
$ git commit -m"second commit"
[master 30beac5] second commit
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename to remove.txt => new name.txt (100%)
 delete mode 100644 to rename.txt

ksobierajczyk@KME43 MINGW64 /d/Simple repository (master) $ git status On branch master nothing to commit, working tree clean

ksobierajczyk@KME43 MINGW64 /d/Simple repository (master)
$ git show
commit 30beac5b0578d4e4b6e64ea3a3c9a323f14e6277 (HEAD -> master)
Author: Krzysztof Sobierajczyk <sobierajczyk.krzysztof@gmail.com>
Date:   Fri Feb 22 13:45:21 2019 +0100
    second commit
diff --git a/to remove.txt b/new name.txt
    <------- Wrong information
similarity index 100%
rename from to remove.txt
rename to new name.txt
diff --git a/to rename.txt b/to rename.txt
deleted file mode 100644
index e69de29..0000000
Jeff King· Feb 22, 2019, 14:10 UTC · re: Krzysztof Sobierajczyk · lore

Re: bug - git version 2.20.1.windows.1

On Fri, Feb 22, 2019 at 02:26:51PM +0100, Krzysztof Sobierajczyk wrote:
Show 9 quoted lines
> ksobierajczyk@KME43 MINGW64 /d/Simple repository (master)
> $ git status
> On branch master
> Changes to be committed:
>   (use "git reset HEAD <file>..." to unstage)
> 
>         renamed:    to remove.txt -> new name.txt
>                      <------------  AND FAIL
>         deleted:    to rename.txt

Git doesn't store rename information; it infers it when generating a diff (and the output from git-status here is a diff between HEAD and the index).

If "to remove" and "to rename" contain identical data, then they are equally valid candidates, and Git has to pick one. In this case it picked the one you didn't expect.

-Peff

← back to recent threads