Skip to content

0.2.0 - 2026-10-19

Latest

Choose a tag to compare

@github-actions github-actions released this 19 Oct 22:36
cf8a742

Release Notes

Added

  • A commit graph in History, shown by default. Its lanes are laid out as lazygit lays them out
    (the layout is ported from lazygit, MIT): ● for a commit, ◉ for a merge and ◎ for the
    checked-out commit. Each branch keeps one theme colour from top to bottom, its labels are pills
    in that colour, and the current branch's line is drawn heavy. Each commit keeps its one line from
    the list, with a spacer line under it that carries only the branch lines down to the next commit.
    history_graph_style = "compact" drops the spacers (one line per commit); any other value than
    "spaced" or "compact" warns and keeps "spaced". L shows or hides the graph, and
    history_graph = false starts with it hidden. It steps aside during a search, a V range,
    compare mode and in a History pane under 34 columns, and cuts lines wider than the pane with ›.
  • Conflict help. Conflicted files head the Changes list with their number of blocks; selecting one
    shows its blocks as two tinted sides under headers named for the operation (merge: Current /
    Incoming; rebase: Base branch / Your commit; cherry-pick: Current branch / Picked commit; revert:
    Current branch / Without change). o keeps the first side, t takes the second, b keeps both,
    n and p move between blocks, u takes the last resolution back and e opens the editor at
    the block. A resolution is written atomically and only over the text that was shown; a block
    with ambiguous markers is left to the editor, and conflict-marker-size is honoured. Conflicts
    without markers (binary, deleted by one side) are explained and settled whole after asking.
    Nothing is staged for you. The marker parser is adapted from druk (MIT).
  • A merge, rebase, cherry-pick or revert that stopped (in gitty or in another terminal) shows in the
    top bar with its conflict count (MERGING topic · 2 conflicts, REBASING feat · step 2/5 · 1 conflict). m continues it once nothing conflicts (no editor; the prepared message is used) or
    aborts it after asking.
  • A merge or pull (merge or rebase) that hits conflicts is left open and asks "Resolve now?":
    Enter goes to the first conflicted file, a aborts, Esc decides later (m opens the dialog).
  • A branch picker (B): Enter switches (a remote-only branch gets a local tracking branch),
    Ctrl-N creates, Ctrl-R renames, Ctrl-D deletes (asking twice when the branch has commits
    its upstream lacks, or HEAD without an upstream, as git judges it) and Ctrl-G merges the
    highlighted branch into the checked-out one after asking. With uncommitted changes, switching
    offers "stash and switch" and merging "stash and merge". After a switch the changes are put back;
    after a conflicted merge they stay in the stash until you finish it (aborting from gitty puts
    them back). gitty never re-applies a stash by itself otherwise.
  • A stash list (S): a applies, p pops, d drops (asks), n stashes the current changes
    under a message; each stash shows its age. Z in the Changes tab stashes with an optional
    message. Stashes include untracked files, and the prompts say so (with the count when there are
    more than 500).
  • A Files tab (3): the working tree as a lazily loaded tree with a read-only, syntax-coloured
    viewer. Changed files show their Changes letter and colour, and folders with changes below them
    a ●. i hides or shows ignored files (files_show_ignored sets the start). e or a
    double-click opens the file in $EDITOR. Files named like secrets (.env, keys, tokens) are not
    read until you press v.
  • The top bar shows PR #<n> when the branch has a GitHub pull request, coloured by its state
    (open, draft, merged, closed; themes can set pr_open, pr_draft, pr_merged, pr_closed
    under [ui]). Clicking it opens the pull request. It needs the gh CLI logged in, is looked up
    in the background (at most every 30 seconds per branch, every 5 minutes while focused), ignores
    pull requests from forks, and keeps the last known badge through a failed lookup.
  • R opens the branch's pull request on GitHub in the browser, or the new-pull-request page when
    there is none (or no gh). The branch must be pushed first.
  • A push rejected because the remote moved on (after an amend or a rebase) offers a force push with
    lease. The question lists the remote commits it would remove; the lease is the commit you last
    fetched, so git refuses if anyone pushed since. main, master and the branch origin/HEAD
    points to are never force pushed.
  • Twelve more built-in themes: nord, one-dark, one-light, gruvbox-light,
    catppuccin-frappe, catppuccin-macchiato, tokyo-night-storm, tokyo-night-day, kanagawa,
    everforest-dark, ayu-mirage and nightfox, credited in THIRD-PARTY-LICENSES.md.
  • A herdr plugin (herdr-plugin/) that opens gitty in a popup on the focused
    pane's repository, downloading a checksum-verified release binary when none is installed.

Changed

  • With the graph shown (the default), History lists commits in topological order (git rev-list --topo-order) instead of by date; L or history_graph = false brings the date order back. On
    a large repository without a commit-graph file the first rows wait for git's sort (about 0.3 s
    per 100,000 commits); auto-tune writes that file on repositories with 10,000 commits or more.
  • While a conflicted file is selected in Changes, p and u mean previous conflict and undo the
    resolution, not pull and undo the last commit.

Fixed

  • Sideways scrolling (h/l, the sideways wheel, Shift+wheel) in the diff and the Files viewer
    only happens when a line is wider than the pane, and stops at the end of the widest line. ‹ and
    › mark lines with text hidden on the left or right.
  • In compare mode the footer labels b "other branch" (it picks another branch to compare with)
    instead of "branch".
  • The footer no longer shows the hints of the pane underneath while a picker, prompt or
    confirmation is open.
  • Outside a repository gitty prints gitty: <dir> is not a git repository, without the internal
    source path.

Install gitty-cli 0.2.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/VedangP57/gitty/releases/download/v0.2.0/gitty-cli-installer.sh | sh

Install prebuilt binaries via Homebrew

brew install VedangP57/tap/gitty

Download gitty-cli 0.2.0

File Platform Checksum
gitty-cli-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
gitty-cli-x86_64-apple-darwin.tar.xz Intel macOS checksum
gitty-cli-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
gitty-cli-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum