Skip to content

Releases

git-cowork 0.6.0

Choose a tag to compare

@github-actions github-actions released this 13 Nov 11:16

Added

  • Workspaces: keep a set of repositories together and see them as a tree
    (folders › repositories › worktrees) on the left of a tab. Clicking a
    repository or worktree shows it in that same tab, so one tab can hold a
    whole project. Each tab can show its own workspace, and the next launch
    reopens it with the repository that was shown.
  • File › Scan Folder… (⌥⌘O) finds the git repositories in a folder and makes a
    workspace of them. It looks one folder level deep by default; change the
    default in Settings › Workspaces, or the depth for one scan in its sheet.
    Scan Folder Again adds repositories that appeared since.
  • File › Open Workspace, a Workspaces list on the welcome screen, and
    View › Show/Hide Workspace (⌃⌘P).
  • The workspace tree shows, next to each repository and worktree, its
    uncommitted changes and commits to push (↑) and pull (↓), like the
    worktrees in the sidebar.
  • Pull a branch from its menu in the graph, also one that isn't checked out:
    right-click its badge (or the remote branch's badge further up) and choose
    "Pull ". The branch moves up to its remote branch without a
    checkout, so your working copy isn't touched. When both have new commits it
    offers to check the branch out, where you pick merge or rebase. The same
    "Pull" is in the sidebar's branch menu.

Changed

  • The sidebar, the inspector and the workspace tree keep the widths you drag
    them to: in every tab, at the next launch, and when a workspace tab shows
    another repository.
  • A window showing a repository is at least as wide as its panels need
    together, so the commit list in the middle always keeps its room. In a
    narrow window a workspace's tree gives way first.
  • The reset entry in a commit's menu reads like GitKraken's: "Reset
    to this commit", with Soft (keep all changes), Mixed (keep working copy but
    reset index) and Hard (discard all changes).
  • Much less work while files keep changing. Files git ignores (build output,
    dependencies, logs) no longer make the app read the repository: a build used
    to start git several times a second for as long as it ran, now it starts it
    once. While an agent or a script keeps editing tracked files, changes show
    about once a second instead of after every write, and less often when the
    app or the tab is in the background. A single save still shows right away.
  • The history no longer reloads all its rows each time the number of changed
    files changes, only the "// WIP" row is redrawn. A branch list you were
    hovering over stays open while files change.

Fixed

  • The count on Pull, Push and the inbox bell showed "…" from 10 on. It now
    shows "9+"; the exact number is in the tooltip.
  • A window on a worktree that lives inside the main repository's folder (such
    as .claude/worktrees/…) didn't notice changes to its own files until you
    switched back to the app.
  • The app's background git status could make a commit or git add running
    at the same moment (in a terminal, by an agent) fail with "Unable to create
    index.lock". It no longer takes that lock.
  • A push the server declined for another reason than branch protection (a
    GitLab push rule such as signed commits, a GitHub ruleset, a pre-receive
    hook) was reported as " is protected on the server". It now says
    the server refused the push and shows the server's own reason.

Install or update

Install or update with one line in Terminal (Apple Silicon, macOS 14+):

curl -fsSL https://raw.githubusercontent.com/michael-smao/git-cowork/main/install.sh | bash

Please don't download the zip below by hand: macOS blocks apps downloaded
in a browser. It's there for the install line and the in-app updater.

With Homebrew: brew install --cask michael-smao/tap/git-cowork

Or click "Update" when git-cowork tells you about this version. Built from
source? Run make update in your git-cowork folder. More in
INSTALL.md.

git-cowork 0.5.4

Choose a tag to compare

@github-actions github-actions released this 12 Nov 15:40

Added

  • In a linked worktree, a small ✕ before the worktree name in the toolbar
    leaves it and switches the tab back to the main worktree (like GitKraken).
  • A branch checked out in a linked worktree shows a worktree icon in its
    history badge, next to the checked-out, local and remote icons.

Changed

  • A tab that stays behind another tab for five minutes takes down its views,
    which are most of a tab's memory. The repository stays loaded, so fetching,
    watching and notifications go on, and a commit message you were writing, the
    selection and the filter are kept. Selecting the tab shows it again at once.
    With ten tabs open the app needs about a third less memory when idle.

Install or update

Install or update with one line in Terminal (Apple Silicon, macOS 14+):

curl -fsSL https://raw.githubusercontent.com/michael-smao/git-cowork/main/install.sh | bash

Please don't download the zip below by hand: macOS blocks apps downloaded
in a browser. It's there for the install line and the in-app updater.

With Homebrew: brew install --cask michael-smao/tap/git-cowork

Or click "Update" when git-cowork tells you about this version. Built from
source? Run make update in your git-cowork folder. More in
INSTALL.md.

git-cowork 0.5.3

Choose a tag to compare

@github-actions github-actions released this 10 Nov 17:27

Added

  • Drag a repository tab sideways to move it. The other tabs step aside while
    you drag, the tab you are on stays selected, and the next launch reopens the
    tabs in the new order.

Changed

  • Dragging a tab no longer moves the window; drag the empty space next to the
    tabs for that. A tab in a window in the background reacts to the first click.
  • At launch the tab that was in front opens first and right away; the other
    repositories join as tabs behind it, in their order, without windows
    popping up one after another. A background tab loads its repository when you
    first select it, so a launch with many tabs no longer loads all of them at
    once and the app stays responsive.
  • A worktree's tab shows the repository name in full and cuts the worktree
    folder first.

Fixed

  • The app no longer stops running git commands after a while. With many
    commands at once (many repositories loading at launch), every worker thread
    ended up waiting for another one, so from then on actions never finished,
    deleting a remote branch waited forever and quitting hung. Each command now
    waits on a thread of its own.
  • Commands that talk to a server can't hang forever: an HTTPS transfer that
    stalls for a minute fails, and fetch, pull and push stop after 10 minutes
    (ls-remote after 1). Clone has no limit.
  • Push on a branch that follows a remote branch with another name (git
    refused with "The upstream branch of your current branch does not match")
    asks where to push: to that remote branch, or to a new one of the same name
    that the branch follows from now on.
  • The list that expands from a row's branch badges covers the row's "+N", so
    it no longer peeks out next to it.

Install or update

Install or update with one line in Terminal (Apple Silicon, macOS 14+):

curl -fsSL https://raw.githubusercontent.com/michael-smao/git-cowork/main/install.sh | bash

Please don't download the zip below by hand: macOS blocks apps downloaded
in a browser. It's there for the install line and the in-app updater.

With Homebrew: brew install --cask michael-smao/tap/git-cowork

Or click "Update" when git-cowork tells you about this version. Built from
source? Run make update in your git-cowork folder. More in
INSTALL.md.

git-cowork 0.5.2

Choose a tag to compare

@github-actions github-actions released this 10 Nov 00:11

Added

  • The repositories open when git-cowork quits open again at the next launch,
    as tabs in the same order with the same one in front. It no longer depends
    on macOS's "Close windows when quitting an app" setting. Turn it off in
    Settings › Reopen repositories at launch. Folders passed on the command line
    open after them, in front.
  • Click a stash in the sidebar to see what's in it: its message, when and on
    which branch it was made, and its files, including the new (untracked) ones
    it took along. Click a file for its diff. Pop, Apply and Delete are in the
    panel too.
  • The search field finds commits by content, across every branch and the whole
    history, not only the commits that are loaded: file:name for commits that
    changed a file whose path contains the text, change:text for commits that
    added or removed that text (git log -S). Both ignore case, take quotes for
    values with spaces (change:"old name"), and combine with plain words.
  • When a search finds nothing, the list says so, and what the search looked at.
  • Ignore for new files in Changes: right-click a file to ignore it, every file
    of its type, or its folder. Right-click a folder or several files to ignore
    those. It adds lines to .gitignore (creating it if needed), which then
    shows under Changes like any other edit.
  • Remotes can be managed in the sidebar: + on Remote adds another one (a fork,
    the repository you forked from) and fetches it. Right-click a remote to
    fetch just that one, rename it, change its URL, copy the URL, open it on its
    host, or remove it. Removing asks first and says how many local branches
    follow it.

Install or update

Install or update with one line in Terminal (Apple Silicon, macOS 14+):

curl -fsSL https://raw.githubusercontent.com/michael-smao/git-cowork/main/install.sh | bash

Please don't download the zip below by hand: macOS blocks apps downloaded
in a browser. It's there for the install line and the in-app updater.

With Homebrew: brew install --cask michael-smao/tap/git-cowork

Or click "Update" when git-cowork tells you about this version. Built from
source? Run make update in your git-cowork folder. More in
INSTALL.md.

git-cowork 0.5.1

Choose a tag to compare

@github-actions github-actions released this 09 Nov 15:47

Added

  • Discarding changes can be undone: Edit > Undo (⌘Z) brings them back,
    including new and deleted files, while staged changes stay untouched.
    A snapshot is saved before discarding; nothing is added to the stash list.
    Once those files are edited again, Undo refuses instead of overwriting the
    new edits.
  • A short "Committed · Undo" hint after anything Edit > Undo can take back
    (commit, amend, reset, checkout, branch delete, discard).
  • Reverting or cherry-picking a merge commit asks once and uses the side it
    was merged into (-m 1), instead of git's "is a merge but no -m option".

Changed

  • The search field in the toolbar searches what the window shows: commits in
    History, tasks on the Board, reviews in Reviews (by title, branch or ID).
    The Board's second search field is gone.
  • The commit message in the commit panel is plain text instead of a box that
    looked like a field. The empty task panel shows the New Task shortcut as a
    keycap.

Fixed

  • A task without a linked branch cut off the left and right edges of its
    panel: its three branch buttons now wrap.
  • Short names no longer get cut in the review header and the commit panel's
    "uncommitted files" strip.

Install or update

Install or update with one line in Terminal (Apple Silicon, macOS 14+):

curl -fsSL https://raw.githubusercontent.com/michael-smao/git-cowork/main/install.sh | bash

Please don't download the zip below by hand: macOS blocks apps downloaded
in a browser. It's there for the install line and the in-app updater.

With Homebrew: brew install --cask michael-smao/tap/git-cowork

Or click "Update" when git-cowork tells you about this version. Built from
source? Run make update in your git-cowork folder. More in
INSTALL.md.

git-cowork 0.5.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 14:06

Added

  • Hovering a commit's branch and tag badges in the graph, when names are cut
    or some are behind "+N", shows all of them at full length in a list over the
    rows below. Click it to select the commit; right-click for the commit's menu.
  • Remove a worktree from the graph: a branch checked out in another worktree,
    and another worktree's "// WIP" row, offer Open Worktree, Open Worktree in
    New Tab and Remove Worktree… in their right-click menu.
  • Remove Worktree… in the sidebar also works for the worktree the tab shows:
    the tab then switches to the main worktree (or closes, when the main
    worktree is already open in another tab). The main worktree is never removed.
  • Removing a worktree runs in the background: its row shows "Removing…" right
    away in every tab of the repository, and the rest of the app stays usable
    while git deletes the folder.
  • A Fetch button in the toolbar, next to Pull: fetches all remotes
    (git fetch --all --prune) without merging anything.
  • The first commit without a git name and email asks for them once (for all
    repositories or this one) and then commits.
  • A repository without commits shows Create Initial Commit (adds a README.md
    if there is none).
  • Stage All and Commit when nothing is staged yet.
  • A banner when HEAD isn't on a branch, with Create Branch Here….
  • Cloning into a folder that already holds the repository offers to open it;
    another folder of that name gets a -2 suffix. Start Task in New Worktree
    does the same for its folder.

Changed

  • Repository tabs sit in their own row at the top of the window, next to the
    traffic lights, like GitKraken's, and are always shown, even with one
    repository open. Each tab shows the repository (and the folder of a linked
    worktree); click to switch, × or middle-click to close, + for a new tab.
    Before, the tabs could be missing altogether.
  • The repository menu in the toolbar lists only repositories (this one and
    recent ones), like GitKraken. Worktrees get their own picker between
    repository and branch, shown when a repository has more than one: switch,
    open one in a new tab, or add one.
  • Checking out a branch that another worktree has checked out (double-click
    or Checkout in the graph, a task's or review's Checkout, Start Task) opens
    that worktree instead of showing an alert: its tab comes to the front, or
    this window switches to it. Changes in this worktree stay where they are.
  • The history scrolls to the checked-out branch when it opens and after a
    checkout, instead of always starting at the newest commit. With no changes
    to commit, the commit panel opens on that branch's commit too.
  • Pull no longer stops with git's "divergent branches" error. It
    fast-forwards when only the remote moved, and when both sides have new
    commits it asks: Merge or Rebase. Uncommitted changes are put aside and
    back. A pull.rebase or pull.ff you set in git config is still followed,
    and Pull ▾ keeps its explicit variants.
  • Double-clicking a remote branch checks out its local branch and brings it
    up to date the same way (a new tracking branch if there is none).
  • The checked-out commit stands out in the history: its row has a stronger
    band in its lane color that reaches under the badges, and its branch badge
    is bold with a light ring.
  • Failed git actions are explained in plain words with buttons for the next
    step, instead of git's raw output in an alert. git's own output is still
    there under Details, shown like a terminal (prompt, errors in red, hints
    dimmed), with Copy and the command log. Among them:
    • Push rejected because the remote moved: Pull, Then Push, or Force Push…,
      which always asks first and says what it overwrites.
    • Uncommitted changes in the way of a switch: Stash & Switch, or Bring
      Changes Along (to the branch's own remote branch, that's the default).
    • Pull or merge with no upstream, a deleted upstream, a protected branch,
      a stale lease, no write access, a new SSH host key, signed out, offline.
  • Conflicts from a merge, rebase, cherry-pick, revert or stash open Changes
    instead of an alert; a stash applied with conflicts is kept and Changes
    offers to delete it once everything is resolved.
  • Merge, rebase and all Pull variants put uncommitted changes aside and back
    (--autostash) instead of refusing.
  • Deleting a local branch always asks, says how many commits exist only on
    it, and offers to delete its remote branch too. Deleting a remote branch
    that is already gone cleans up the leftover entry instead of failing.
  • Pushing a branch without an upstream asks where to (remote and name, like
    GitKraken); a repository without a remote asks for one.
  • A second git action waits for the running one instead of being refused.
  • Sheets (new branch, tag, rename, stash, task, review request, create pull
    request) stay open with the error inline when something fails, and say
    when a branch or tag name is taken.

Fixed

  • A short tag or branch name like v1 in a narrow Branch / Tag column no
    longer folds into "+1" when it fits.
  • After removing a worktree, its "// WIP" row could stay in the graph.
  • Settings scroll when they are taller than the window, and the window can be
    made taller. Before, the lower sections could not be reached on smaller screens.
  • In a graph with more lanes than fit, a branch's line ran beside its commits:
    the nodes were moved to the column's edge, their lines weren't. Lines now
    move with them.
  • Check for Updates could freeze the app: its message could open off screen
    while still blocking every window, so nothing could be clicked and the app
    could not even be quit. Its messages now open as a sheet on the front window.
  • GitCowork /path/to/repo from a terminal could open the welcome screen
    instead of the folder: the first window often appeared before the command
    line was read, and nothing told it there was a folder to open.

Install or update

Install or update with one line in Terminal (Apple Silicon, macOS 14+):

curl -fsSL https://raw.githubusercontent.com/michael-smao/git-cowork/main/install.sh | bash

Please don't download the zip below by hand: macOS blocks apps downloaded
in a browser. It's there for the install line and the in-app updater.

With Homebrew: brew install --cask michael-smao/tap/git-cowork

Or click "Update" when git-cowork tells you about this version. Built from
source? Run make update in your git-cowork folder. More in
INSTALL.md.

git-cowork 0.4.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 00:01

Added

  • Push any local branch from its right-click menu in the sidebar or the graph
    without checking it out, also when another worktree has it open.
  • Settings › Language: follow macOS, or always English or German.
  • Several accounts on one server, like personal and work on github.com. A
    repository uses the account you pick in its status bar (saved as
    git config cowork.<host>.account), else the one named in its URL, else the
    one added first. Cloning from an account's list keeps using that account.
  • Pull/merge requests and CI, with an account for the host (GitHub, GitLab,
    Gitea, Forgejo): open requests in the sidebar, #12 on their branches in
    the graph, CI passed/failed/running on branches and commits, the checks
    that failed in the commit panel with links to their logs, and Create Pull
    Request from the app. All worktree tabs of a repository share one lookup,
    and nothing is asked while the app is in the background.

Changed

  • Tokens in the Keychain are stored per account instead of per server. Existing
    ones move over by themselves.

Fixed

  • Two quick edits on the board could leave an older version of a task on screen
    until the next change. What was saved was always right.

Install or update

Install or update with one line in Terminal (Apple Silicon, macOS 14+):

curl -fsSL https://raw.githubusercontent.com/michael-smao/git-cowork/main/install.sh | bash

Please don't download the zip below by hand: macOS blocks apps downloaded
in a browser. It's there for the install line and the in-app updater.

With Homebrew: brew install --cask michael-smao/tap/git-cowork

Or click "Update" when git-cowork tells you about this version. Built from
source? Run make update in your git-cowork folder. More in
INSTALL.md.

git-cowork 0.3.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 15:41

Added

  • Settings › Appearance: follow macOS, or always light or dark.
  • Homebrew: brew install --cask michael-smao/tap/git-cowork, updates with
    brew upgrade. For Homebrew installs the app shows that command instead of
    updating itself.

Changed

  • Release notes, README and INSTALL say clearly not to download the zip in a
    browser, and how to replace a copy macOS blocked.
  • The app and git cowork always sync tasks with the same remote:
    git config cowork.remote in the repository (the app saves its pick there).
    The app-wide "Sync remote" setting is gone.
  • git cowork new Fix login bug works without quotes; unknown options and
    extra words are errors instead of being ignored; --to anna finds a
    teammate by handle; approve/changes honor --json.
  • Start Task in the app and git cowork start pick the same branch and run
    the same git command (a pushed branch is tracked, a new one tracks nothing).

Fixed

  • install.sh keeps the old app if anything fails or is interrupted while
    replacing it, and says what to do when the app folder isn't writable.
  • The in-app updater passes install.sh only the environment it needs, and
    gives up after 10 minutes.
  • Branch names in shared tasks and reviews are checked before git sees them.
  • Saving a renewed token no longer risks losing the old one.

Install or update

Install or update with one line in Terminal (Apple Silicon, macOS 14+):

curl -fsSL https://raw.githubusercontent.com/michael-smao/git-cowork/main/install.sh | bash

Please don't download the zip below by hand: macOS blocks apps downloaded
in a browser. It's there for the install line and the in-app updater.

With Homebrew: brew install --cask michael-smao/tap/git-cowork

Or click "Update" when git-cowork tells you about this version. Built from
source? Run make update in your git-cowork folder. More in
INSTALL.md.

git-cowork 0.2.0

Choose a tag to compare

@github-actions github-actions released this 07 Nov 00:35

Coming from 0.1.0? Update once by hand with the one-line install (or
make update); 0.1.0 doesn't have the in-app updater yet.

Added

  • git cowork command-line tool for people and agents: list, create, edit,
    start (optionally in a new worktree) and comment on tasks; request, list and
    approve reviews; inbox; --json output. Installed with the app (one-line
    install or make install).
  • One-line install without Xcode: curl -fsSL …/install.sh | bash downloads
    the newest release, checks its checksum and installs the app and
    git cowork. Releases now include the app as a zip.
  • Updates from inside the app: a daily check (Settings › Updates) shows
    "Update to x.y.z" in the status bar; one click installs it and restarts.
    Also git-cowork › Check for Updates….

Install or update

Install or update with one line in Terminal (Apple Silicon, macOS 14+):

curl -fsSL https://raw.githubusercontent.com/michael-smao/git-cowork/main/install.sh | bash

Please don't download the zip below by hand: macOS blocks apps downloaded in a browser. It's there for the install line and the in-app updater. Got the message that Apple can't check the app? Run the line above; it replaces the blocked copy.

Or click "Update" when git-cowork tells you about this version. Built from
source? Run make update in your git-cowork folder. More in
INSTALL.md.

git-cowork 0.1.0

Choose a tag to compare

@michael-smao michael-smao released this 07 Nov 00:08

First public release.

Git client

  • Tabs for repositories and worktrees; repository and branch pickers.
  • Commit graph with lane colors, author initials, branch badges and a
    // WIP row for every worktree with uncommitted changes.
  • Sidebar with local and remote branches, worktrees (live uncommitted and
    ahead/behind counts), stashes and tags.
  • Changes panel with staging per file or hunk, discard, commit and amend.
  • Diff in hunk or split view with intra-line highlights.
  • Pull, push, fetch, branch, stash, merge and rebase with conflict handling.
  • Background fetch of every open repository every 5 minutes while the app is
    in front (Settings › Git › Fetch automatically). It never asks for
    credentials and pauses after a failed sign-in.
  • Links to create pull/merge requests on GitHub, GitLab, Gitea and Forgejo.
  • Settings > Accounts: sign in to GitHub or GitLab in the browser, or add an
    access token (also for Gitea and Forgejo), and HTTPS push and pull work
    without setting up git. Tokens are kept in the Keychain and used only by
    git-cowork; git in the terminal and SSH remotes are unchanged.
  • Clone from your repos: with an account signed in, the Clone sheet lists
    your repositories and your organizations' or groups' (newest activity
    first), with a filter. Pick one to fill in its HTTPS URL, or double-click
    to clone it right away.
  • Settings > Accounts > Create SSH Key: makes an ed25519 key in
    ~/.ssh/git-cowork_<host>, keeps its random passphrase in the Keychain and
    adds it to your GitHub or GitLab account. git-cowork then uses it for SSH
    remotes on that host; ~/.ssh/config isn't changed (SSH Host Entry shows a
    block to copy if the terminal should use the key too). Signing in now also
    asks for GitHub's write:public_key and GitLab's api scope; older
    sign-ins are asked to sign in again before adding a key.
  • Command log (⌘J) showing every git command the app runs.
  • Undo (⌘Z) for the last commit, amend, reset, checkout or branch delete,
    run as plain git commands; not offered once you've pushed.
  • The app's own git calls ignore a repository's core.fsmonitor setting,
    so opening a repo can't start a program named in its config.
  • English and German. The app follows your Mac's language; pick one for
    git-cowork alone in System Settings › General › Language & Region › Applications.
  • If a macOS update removed Apple's developer tools (and with them git),
    the app says so at launch and offers to install them.

Cowork

  • Shared task board (Backlog, To Do, In Progress, In Review, Done) with
    assignees, labels, linked branches and comments.
  • Review requests with reviewers, verdicts and comments.
  • Inbox and macOS notifications for assignments, reviews and @mentions.
  • Everything stored on refs/cowork/main and synced with plain git.

Install or update

New install: see INSTALL.md. Needs an Apple Silicon Mac, macOS 14+ and the Xcode Command Line Tools with Swift 6.

git clone https://github.com/michael-smao/git-cowork.git && cd git-cowork && make install

Already installed: run make update in your git-cowork folder.