threads / discuss / 50178

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

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

## tl;dr

4 messages between Jan 8, 2019 and Jan 8, 2019.

replies: 3people: 2as markdown or json

Anthony Sottile· Jan 8, 2019, 07:25 UTC · lore

``` 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· Jan 8, 2019, 07:29 UTC · re: Anthony Sottile · lore

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

On Mon, Jan 7, 2019 at 11:25 PM Anthony Sottile <asottile@umich.edu> wrote:
Show 6 quoted lines
> 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· Jan 8, 2019, 09:44 UTC · re: Anthony Sottile · lore

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

On Tue, Jan 8, 2019 at 2:28 PM Anthony Sottile <asottile@umich.edu> wrote:
Show 14 quoted lines
>
> ```
> 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.

Show 39 quoted lines
> 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· Jan 8, 2019, 10:06 UTC · re: Duy Nguyen · lore

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

On Tue, Jan 8, 2019 at 4:44 PM Duy Nguyen <pclouds@gmail.com> wrote:
Show 18 quoted lines
>
> 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

← back to recent threads