git-forest(1)

Name

git-forest — display the commit history forest

Syntax
git-forest [-a] [--no-rebase] [--style=number] [--sha] [--svdepth=depth] [rev-list-options] [refspec...]

Description
git-forest is a command-line zero-lookahead git repository history visualizer with Unicode output with a bit of gitk resemblance.

  Why another program?
The tree visualization of gitk is very useful, but there were (git 1.5.4 timeframe) no decent visualizers that can run in a console window, without the need to have X around (which gitk depends on). tig has numerous limitations, it cannot display octopus merges or octopus branching. As of git 1.5.6, there are still no other Unicode-output programs known to me.

Options

-a  Display author for each commit.

--no-rebase
    Do not show the rebase pseudo-refs.

--style=1
    Use single-line visuals (default).

--style=2
    Use double-line visuals.

--style=10
    Use specific rounded Unicode visuals for edges; glyphs might only be available with X11 terminals and appropriate fonts.

--style=15
    Use single bold-line visuals. Not readily usable with VGA console fonts without special unimaps.

--sha
    Display (abbreviated) SHAs for each commit.

--svdepth=distance
    This option controls the maximum look-ahead window. If M0's parent (M1) appears within distance or fewer lines of M0, a "sub-vine" will be drawn in the space between the regular vines.
    Default: 3

    $ git-forest --svdepth=3 --topo-order
    ┌─ M0: Merge G into M
    ├─┐
    │ ├ G0
    │ ├ G1: Merge N into G
    │ ├─┐
    │ │ ├ N0
    │ │ ├ N1
    │ │ ├ N2
    │ │ ├ N3
    ├─┘ │
    ├   │ G2/M1
    ├───┘
    └ N4/M2
    $ git-forest --svdepth=5 --topo-order
    ┌─ M0: Merge G into M
    ├─┐
    │ ├ G0
    │ ├ G1: Merge N in to G
    │┌┤
    ││├ N0
    ││├ N1
    ││├ N2
    ││├ N3
    ├┘│
    ├ │ G2/M1
    ├─┘
    └ N4/M2

    For comparison, this is the date-order representation of this example, in case you want to reproduce it:
    $ git-forest --date-order
    ┌─ M0: Merge G into M
    ├─┐
    │ ├ G0
    │ ├ G1: Merge N into G
    │┌┤
    ├┘│
    ├ │ G2/M1
    │ ├ N0
    │ ├ N1
    │ ├ N2
    │ ├ N3
    ├─┘
    └ N4/M2

All other options and arguments are passed down to git-log. Commonly useful options are --all and --topo-order.

Examples
git-forest --all | less -RS
git-forest origin/master | less -RS

This tool does not try to minimize the empty space between branches like gitk does. Take it as a feature.

See also
hxtools(7)