# `git reset` for delete + intent-to-add doesn't reset

4 messages from 2019-01-08 to 2019-01-08. Participants: Anthony Sottile, Duy Nguyen.
Thread: https://gitlist.dev/t/50178

## Anthony Sottile, 2019-01-08 07:25

Subject: `git reset` for delete + intent-to-add doesn't reset
Message-ID: <CA+dzEBmVQ8H78uHSPSBy+HqLXZ3xE5=jVdYDfPOVZ_53U8YA-A@mail.gmail.com>
URL: https://gitlist.dev/e/CA%2BdzEBmVQ8H78uHSPSBy%2BHqLXZ3xE5%3DjVdYDfPOVZ_53U8YA-A%40mail.gmail.com

```
ˋˋˋ
git --version
rm -rf t
git init t
cd t
touch a
git add a
git commit -m "add a"
git rm a
touch a
git add --intent-to-add a
git status --short
git reset -- a
git status --short
ˋˋˋ

(the git version below is compiled from
ecbdaf0899161c067986e9d9d564586d4b045d62)

ˋˋˋ
$ bash -x t.sh
+ git --version
git version 2.20.GIT
+ rm -rf t
+ git init t
Initialized empty Git repository in /tmp/t/t/.git/
+ cd t
+ touch a
+ git add a
+ git commit -m 'add a'
[master (root-commit) 95a1815] add a
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
+ git rm a
rm 'a'
+ touch a
+ git add --intent-to-add a
+ git status --short
DA a
+ git reset -- a
Unstaged changes after reset:
A    a
+ git status --short
DA a
ˋˋˋ

Even `git reset --intent-to-add -- a` or `git checkout -- a` don't
seem to clear the `intent-to-add` state

How do I reset the intent-to-add status in this case?

Anthony

```

## Anthony Sottile, 2019-01-08 07:29

Subject: Re: `git reset` for delete + intent-to-add doesn't reset
Message-ID: <CA+dzEB=fM_hD6P=fCvOtDrEAKa4eOgErmp8=nzRfoxOJHAG_zg@mail.gmail.com>
URL: https://gitlist.dev/e/CA%2BdzEB%3DfM_hD6P%3DfCvOtDrEAKa4eOgErmp8%3DnzRfoxOJHAG_zg%40mail.gmail.com
In-Reply-To: <CA+dzEBmVQ8H78uHSPSBy+HqLXZ3xE5=jVdYDfPOVZ_53U8YA-A@mail.gmail.com>

```
On Mon, Jan 7, 2019 at 11:25 PM Anthony Sottile <asottile@umich.edu> wrote:
> Even `git reset --intent-to-add -- a` or `git checkout -- a` don't
> seem to clear the `intent-to-add` state
>
> How do I reset the intent-to-add status in this case?
>
> Anthony

Pressed send too quickly, it appears I can use `git rm --cached -- a`
to undo that.

```

## Duy Nguyen, 2019-01-08 09:44

Subject: Re: `git reset` for delete + intent-to-add doesn't reset
Message-ID: <CACsJy8Atwp1nQbDaxYSNiDFmVmMG2h88w=dAZWU1SF6JQ18EEw@mail.gmail.com>
URL: https://gitlist.dev/e/CACsJy8Atwp1nQbDaxYSNiDFmVmMG2h88w%3DdAZWU1SF6JQ18EEw%40mail.gmail.com
In-Reply-To: <CA+dzEBmVQ8H78uHSPSBy+HqLXZ3xE5=jVdYDfPOVZ_53U8YA-A@mail.gmail.com>

```
On Tue, Jan 8, 2019 at 2:28 PM Anthony Sottile <asottile@umich.edu> wrote:
>
> ˋˋˋ
> git --version
> rm -rf t
> git init t
> cd t
> touch a
> git add a
> git commit -m "add a"
> git rm a
> touch a
> git add --intent-to-add a
> git status --short
> git reset -- a

"git reset" without "-- a" does remove intent-to-add status. I'll look
into whether "reset -- a" should do the same.

> git status --short
> ˋˋˋ
>
> (the git version below is compiled from
> ecbdaf0899161c067986e9d9d564586d4b045d62)
>
> ˋˋˋ
> $ bash -x t.sh
> + git --version
> git version 2.20.GIT
> + rm -rf t
> + git init t
> Initialized empty Git repository in /tmp/t/t/.git/
> + cd t
> + touch a
> + git add a
> + git commit -m 'add a'
> [master (root-commit) 95a1815] add a
>  1 file changed, 0 insertions(+), 0 deletions(-)
>  create mode 100644 a
> + git rm a
> rm 'a'
> + touch a
> + git add --intent-to-add a
> + git status --short
> DA a
> + git reset -- a
> Unstaged changes after reset:
> A    a
> + git status --short
> DA a
> ˋˋˋ
>
> Even `git reset --intent-to-add -- a` or `git checkout -- a` don't
> seem to clear the `intent-to-add` state
>
> How do I reset the intent-to-add status in this case?
>
> Anthony



-- 
Duy

```

## Duy Nguyen, 2019-01-08 10:06

Subject: Re: `git reset` for delete + intent-to-add doesn't reset
Message-ID: <CACsJy8Bov1asw+_J_fbhKqigM==xNPi8itDGkhibkYVch4pvmQ@mail.gmail.com>
URL: https://gitlist.dev/e/CACsJy8Bov1asw%2B_J_fbhKqigM%3D%3DxNPi8itDGkhibkYVch4pvmQ%40mail.gmail.com
In-Reply-To: <CACsJy8Atwp1nQbDaxYSNiDFmVmMG2h88w=dAZWU1SF6JQ18EEw@mail.gmail.com>

```
On Tue, Jan 8, 2019 at 4:44 PM Duy Nguyen <pclouds@gmail.com> wrote:
>
> On Tue, Jan 8, 2019 at 2:28 PM Anthony Sottile <asottile@umich.edu> wrote:
> >
> > ˋˋˋ
> > git --version
> > rm -rf t
> > git init t
> > cd t
> > touch a
> > git add a
> > git commit -m "add a"
> > git rm a
> > touch a
> > git add --intent-to-add a
> > git status --short
> > git reset -- a
>
> "git reset" without "-- a" does remove intent-to-add status.

No I'm wrong. But it was because I didn't follow your exact steps.

This is quite unique corner case. What happens is "git reset"
internally does "git diff --cached" basically to see what paths need
to update, then reset those paths and as a side effect, intent-to-add
status will be removed. But in this case, "a" in HEAD has empty
content, exactly the same content represented by an intent-to-add
entry. So "git diff --cached" decides there's no changes in "a", no
need to update it (so i-t-a status remains).

This can only happen if a file in HEAD is empty, which is quite
unlikely. This fix could be go through the index list the second time
just for resetting i-t-a status, but I'm not sure if it's worth doing.
-- 
Duy

```
