gitgit-loggit-bisect

How can I see git bisect status of commits in git log?


I'm doing a git bisect, and I've found a few good and bad commits so far, which I can confirm by running git bisect log.

However, if I run git log for my branch git log --graph --decorate=full origin/master..mybranch I can see it display that a certain commit is origin/mybranch and mybranch, and that another that I currently have checked out is (HEAD), but it doesn't display the commits that were "good" or "bad" with anything.

My git version is "git version 2.40.0.windows.1".

Here's a reproduction using a publicly available git repo.

git clone https://github.com/agrimm/zombie-chaser.git
cd zombie-chaser
git bisect start
git bisect bad d27ec73cf2f1df89cbccd41494f579e066bad6fe
git bisect good 3a99fd1ee5a20aa18e5202e9a8c3ee0ba04a740e
git log --graph --decorate=full master
* commit d27ec73cf2f1df89cbccd41494f579e066bad6fe (refs/remotes/origin/master, refs/remotes/origin/HEAD, refs/heads/master)
| Date:   Mon Apr 12 23:24:20 2010 +1000
|
|     Fixed typos, updated home page URL.
|
* commit ae1c1d263168cf123578ff5d50f4fc7eb9726a52 (HEAD)
| Date:   Sun Apr 11 22:17:39 2010 +1000
|
|     Bump up to version 0.1.0.
|
* commit 2a1e2a6c7d2b7036a36c291cc220cbc486815aa8
| Date:   Sun Apr 11 19:19:27 2010 +1000
|
|     Move library files and ui files into a lib subdirectory, and other changes to file loading.
|
* commit 3a99fd1ee5a20aa18e5202e9a8c3ee0ba04a740e
| Date:   Sun Apr 11 12:28:10 2010 +1000
|
|     Removed gosu as a dependency, to satisfy jruby.


Running of git bisect log:

$ git bisect log
git bisect start
# status: waiting for both good and bad commits
# bad: [d27ec73cf2f1df89cbccd41494f579e066bad6fe] Fixed typos, updated home page URL.
git bisect bad d27ec73cf2f1df89cbccd41494f579e066bad6fe
# status: waiting for good commit(s), bad commit known
# good: [3a99fd1ee5a20aa18e5202e9a8c3ee0ba04a740e] Removed gosu as a dependency, to satisfy jruby.
git bisect good 3a99fd1ee5a20aa18e5202e9a8c3ee0ba04a740e

What I expected: some text of "good" or "bad" after certain commits, what I actually got: nothing.


Solution

  • You need to include the bisect refs with either (simplest, shows all refs):

    git log --decorate-refs=refs/ [other options]
    

    Or (longer but more precise):

    git log --graph --decorate=full --decorate-refs=refs/bisect \
        --decorate-refs=refs/heads --decorate-refs=refs/tags \
        --decorate-refs=refs/remotes --decorate-refs=refs/stash \
        --decorate-refs=HEAD
    

    Here I’ve listed refs/bisect along with the default decorated refs so that we don’t include more than we want. [1]

    Explanation

    --decorate=full means that refs are shown “in full”, in other words the full ref path:

    # with `--decorate=short`
    master
    # with `--decorate=full`
    refs/heads/master
    

    “Full” doesn’t mean “all kinds of refs” (that’s at least what I thought at first).

    The command git log --graph --decorate=full origin/master..mybranch doesn’t work because refs/bisect is not decorated by default. I don’t think man git-log [2] is terribly direct about documenting what the default refs are, but it is mentioned as a sort of appendix to one of the switches:

    If none of these options or config settings are given, then references are used as decoration if they match HEAD, refs/heads/, refs/remotes/, refs/stash/, or refs/tags/.

    Notes

    1. There is also the config option log.excludeDecoration
    2. Git 2.40.1