# Best way to check whether working tree matches a commit's tree

3 messages from 2017-08-22 to 2017-08-22. Participants: Sebastian Schuberth, Junio C Hamano.
Thread: https://gitlist.dev/t/46648

## Sebastian Schuberth, 2017-08-22 18:00

Subject: Best way to check whether working tree matches a commit's tree
Message-ID: <onhres$g9$1@blaine.gmane.org>
URL: https://gitlist.dev/e/onhres%24g9%241%40blaine.gmane.org

```
Hi,

I'd like to check whether my working tree exactly matches the tree of a given commit. That is, there should not be any untracked, staged or modified files (including ignored files).

Currently, I'm doing this in two steps:

- check for success and empty output of "git status --ignored --porcelain"
- check that the output of "git rev-parse HEAD" matches the given commit

While this works, it feels sub-optimal. Is there a better / smarter way?

-- 
Sebastian Schuberth


```

## Junio C Hamano, 2017-08-22 19:34

Subject: Re: Best way to check whether working tree matches a commit's tree
Message-ID: <xmqqfucj2y7d.fsf@gitster.mtv.corp.google.com>
URL: https://gitlist.dev/e/xmqqfucj2y7d.fsf%40gitster.mtv.corp.google.com
In-Reply-To: <onhres$g9$1@blaine.gmane.org>

```
Sebastian Schuberth <sschuberth@gmail.com> writes:

> Hi,
>
> I'd like to check whether my working tree exactly matches the tree of a given commit. That is, there should not be any untracked, staged or modified files (including ignored files).
>
> Currently, I'm doing this in two steps:
>
> - check for success and empty output of "git status --ignored --porcelain"
> - check that the output of "git rev-parse HEAD" matches the given commit
>
> While this works, it feels sub-optimal. Is there a better / smarter way?

I do not think so; you want three things to match and you have a way
to compare two things at a time.

By the way, I think your second check should compare

	rev-parse HEAD^{tree} $that_commit^{tree}

as you are checking if the tree exactly matches.

```

## Sebastian Schuberth, 2017-08-22 20:08

Subject: Re: Best way to check whether working tree matches a commit's tree
Message-ID: <CAHGBnuPpJtdTBPapFrKcEg6QknBkMjFzwmF0cx9S_2Uo+vp2HA@mail.gmail.com>
URL: https://gitlist.dev/e/CAHGBnuPpJtdTBPapFrKcEg6QknBkMjFzwmF0cx9S_2Uo%2Bvp2HA%40mail.gmail.com
In-Reply-To: <xmqqfucj2y7d.fsf@gitster.mtv.corp.google.com>

```
On Tue, Aug 22, 2017 at 9:34 PM, Junio C Hamano <gitster@pobox.com> wrote:

>> While this works, it feels sub-optimal. Is there a better / smarter way?
>
> I do not think so; you want three things to match and you have a way
> to compare two things at a time.

Right. I was just thinking if there's a lesser known command like "git
diff --no-index", but instead of taking two paths, take just one path
and a commit.

> By the way, I think your second check should compare
>
>         rev-parse HEAD^{tree} $that_commit^{tree}
>
> as you are checking if the tree exactly matches.

In fact, I was considering to use "git diff HEAD $that_commit" as I
don't really care whether the SHA1s are equal, but just about the file
contents / tree.

-- 
Sebastian Schuberth

```
