Skip to content

v0.7.2

Choose a tag to compare

@github-actions github-actions released this 19 Aug 09:54
· 301 commits to main since this release

Before you double-click

This build is not signed or notarized, so macOS blocks the first launch. Allow it once:

  • macOS 15 Sequoia and later — double-click, dismiss the warning, then open
    System Settings ▸ Privacy & Security and click Open Anyway. Apple removed the
    Control-click shortcut for unsigned apps in macOS 15, so right-clicking does not help.
  • macOS 13–14 — right-click the app ▸ Open, then confirm.

Only the first launch asks.

The Git plugin, from a first pass into something worth reaching for — and the host change that
made the last of it possible.

Added

  • The Git plugin grew from two columns and five commands into something worth reaching for. A
    panel with the working tree's changes, staging, unstaging, discarding and committing (amend
    included), and any file's diff opening in the app's own compare window — no second diff
    implementation. A history window: commits with a lane graph, what each one changed, a diff per
    file, and the same window for one file's history. Blame as a table, each line's commit openable
    as a diff. Branches and stashes: switch, create, merge, delete, stash push/pop/drop, and
    fetch/pull/push that can be cancelled instead of appearing to hang — credentials are left entirely to
    the SSH agent and git's own credential helper, and a conflicted file opens as ours against theirs.
    .gitignore from the context menu (this file, this file type, this folder), and revert or
    cherry-pick a commit from the history window, each refusing up front when the working tree is not
    clean rather than stopping half-way through.

  • Tags. The Branches window has a third list: create a tag (typing a message makes it annotated),
    delete it, switch to it — with a plain warning that a tag is not a branch and HEAD ends up detached — and
    push a tag, which is its own action because git push does not carry tags. Previously the plugin
    showed branches and stashes and no tags at all.

  • The history shows where the branches and tags are. A commit row now names the refs pointing at it:
    ● main, ↗ origin/main, ⚑ v1.0.

  • Right-click, Return and Cmd+R work in every Git window. Each list has a context menu with its own
    actions, right-clicking selects the row under the cursor first, Return does what a double-click does, and
    Cmd+R reloads — a commit made in a terminal used to leave a Git window quietly out of date with no way to
    refresh it. You can also copy what these windows are actually asked for: a commit hash, a subject, a file
    path, a blamed line, a branch or tag name. And Push/Pull are in the Git panel, next to the commit.

  • Tidy up the commits you have not pushed yet. Rebase… lists the commits ahead of the upstream and
    lets you squash, fix up, drop, reorder or reword them, then rewrites the branch — with a plain refusal
    when something is in the way (uncommitted changes, an open conflict, no upstream) instead of git's
    terminal wording. If a rebase stops in a conflict, the same window becomes Continue / Skip / Abort, so a
    half-finished branch is not something you have to finish in a terminal.

  • A conflict can now be resolved in the app. Resolve Conflict… used to show ours against theirs
    and leave the conflict markers in the file — the actual resolution happened somewhere else. It now opens
    a list of the file's conflicted regions with a decision per region (take ours, take theirs, take both,
    leave open), writes the file and stages it. It refuses to stage while a region is still open, because
    git will happily commit <<<<<<<, and it refuses to touch a file whose markers it cannot read rather
    than guessing at them. Not a merge editor: for a region that needs both sides interleaved by hand, the
    editor is one button away.

  • A plugin command that talks to the network no longer freezes the window. A plugin can now declare a
    command long-running; the app then runs it in the background, shows a small progress window with the
    command's own output, and lets you cancel it — which actually stops the work rather than just closing the
    window. Git's Push and Pull use it: an unreachable server used to lock the whole application up for as
    long as the network took to give up.

  • A push that fails for want of a password now has somewhere to look. Credentials… says what this
    repository authenticates with — SSH or HTTPS, whether a credential helper is configured, whether an SSH
    agent is running and actually holds a key — and offers one action: let git keep credentials in the macOS
    Keychain. The plugin never asks for, shows or stores a passphrase; it configures git's own helper and
    otherwise points at the SSH agent.

  • "Open on the Web" for a file, a commit or a branch. Built from the remote's URL — GitHub, GitLab,
    Bitbucket, Azure DevOps — with no API, no token and no account. A file link points at the branch your
    colleagues can actually see. For a host whose link layout is unknown it offers the repository page rather
    than guessing at a URL that would 404.

Fixed

  • The Git status column no longer lies inside a linked worktree or a submodule. There .git is a
    file rather than a directory, so the plugin was watching an index file that does not exist: a commit or
    a git add made outside the app reached the column only after a delay. It now asks git where its
    directory really is. The column also leads with a small glyph — ● Modified, ⚠ Conflict,
    ? Untracked — so a listing can be scanned rather than read.

  • A Git plugin window drew its content in a narrow strip down the middle. An 820-point window held
    a 436-point commit list, with the header floating in the centre. All four windows now fill.