git-muster
Every branch, present and accounted for.
Git Muster is a compact command-line report for local Git branches. It separates worktree dirtiness from committed branch state, identifies what is published and what needs attention, shows linked worktrees, and adds pull-request status when the GitHub CLI is available.
project :: feature/report
worktree, clean
--------------------------------------------------------------------------------
BRANCH (4 local) REMOTE STATE WORKTREE UPDATED PULL REQUEST
main origin ↓ behind 2 main-release 3h -
▸ feature/report origin ↑ ahead 1 - 12m #42 approved
fix/parser origin ✓ in sync - 2d #39 merged
experiment - · local only - 1w -
--------------------------------------------------------------------------------
1 other linked worktree:
main → /worktrees/project/main-release
✓ working tree clean
1 with unpushed commits · 1 behind · 1 local only
Features
- One scannable report covering every local branch.
- Publication state derived independently from the configured upstream.
- Ahead, behind, diverged, local-only, and remote-gone states.
- Conditional linked-worktree names and checkout paths.
- Draft, open, approved, changes-requested, merged, and closed GitHub pull requests.
- Clickable, underlined PR numbers in supported interactive terminals.
- Responsive terminal layout plus stable plain output with ASCII interface glyphs for logs and pipes.
- Read-only operation with
--no-fetch; no branch switching, deletion, merging, rebasing, or pushing.
Requirements
- Python 3.13 or 3.14
- Git 2.23 or newer, for
git branch --show-currentandfor-each-ref's%(worktreepath) - uv for the recommended installation
- Optional: an authenticated GitHub CLI for pull-request information
Install
Install the latest release from PyPI:
uv tool install git-muster
Use uv tool upgrade git-muster to update an existing installation.
The installed commands are equivalent:
git-muster
gm
git muster
For development from a clone:
git clone https://github.com/olearydj/git-muster.git
cd git-muster
uv sync --locked --all-groups
uv run git-muster --help
Usage
Run the report from anywhere inside a Git repository:
git muster
By default, Git Muster runs git fetch --all --prune --quiet before reporting so remote-tracking references are current. When that fetch fails, because the machine is offline or a remote no longer answers, the report still renders from the references already on disk and says that branch states may be out of date. Skip all network activity and repository mutation with:
git muster --no-fetch
Use ASCII without color or terminal hyperlinks for logs and pipes:
git muster --plain
The built-in help includes examples, effects, linked-worktree behavior, and a Rich branch-state reference:
git muster --help
git muster --version
Color, symbols, and width
Color, Unicode symbols, and clickable pull-request numbers appear when the report is written to an interactive terminal that can render them. Git Muster honors the usual overrides:
| Variable | Effect |
|---|---|
NO_COLOR |
Disables color; symbols and layout are unchanged. |
FORCE_COLOR, CLICOLOR_FORCE |
Keep color when output is redirected to a file or pipe. |
COLUMNS |
Overrides the detected terminal width used to fit columns. |
--plain overrides all of them and uses ASCII interface glyphs without color or terminal hyperlinks. Repository-provided text, including branch, remote, and worktree names, is preserved and may contain Unicode. Git Muster also falls back to the ASCII glyph set on its own whenever the destination stream cannot encode its symbols, so its built-in decorations never cause an encoding failure.
Reading the report
| Column | Meaning |
|---|---|
BRANCH |
Local branch name; the leading marker identifies the current branch. |
REMOTE |
Push remote or matching remote branch; - means no current publication relationship. |
STATE |
Ahead/behind relationship between the local branch and its publication branch. |
WORKTREE |
Directory holding the branch when it is checked out elsewhere; omitted when none exist. |
UPDATED |
Relative date of the branch tip. |
PULL REQUEST |
Optional GitHub PR number and normalized state. |
Publication is deliberately separate from Git's configured upstream. A branch is recognized as published when it has a push destination or matching remote branch, even if it has no upstream or tracks a local parent branch. Git Muster retains both relationships internally but reports publication state by default.
| State | Meaning |
|---|---|
in sync |
Local and remote branch tips agree. |
ahead N |
Local commits have not been pushed. |
behind N |
Remote commits are missing locally. |
ahead N, behind M |
Local and remote histories have diverged. |
remote gone |
A configured same-name push or upstream branch no longer exists remotely. |
local only |
No push destination or matching remote branch currently exists. This does not claim the branch was never published. |
When another linked worktree holds a branch, Git Muster shows its directory in the table and lists the full checkout path below it. It does not scan those other worktrees for dirtiness or change them.
GitHub integration uses one optional gh pr list --state all --limit 100 query, so a branch whose pull request falls outside the hundred most recent is reported without pull-request state. When several pull requests share a head branch, the newest open, draft, approved, or changes-requested one wins over closed and merged ones. Without an installed and authenticated gh, or when no remote points at a known GitHub host, the complete Git report still works and names the reason pull-request state is missing.
Safety and scope
Git Muster reports; it does not manage branches or worktrees. It never switches, deletes, merges, rebases, or pushes branches. Its only default repository mutation is refreshing remote-tracking references with git fetch --all --prune; --no-fetch makes the entire run read-only.
Git Muster intentionally has no configuration file, interactive browser, branch tree, cleanup command, or plugin system.
Development
Runtime dependencies are limited to Typer and Rich. Repository inspection uses the standard library and Git CLI, while tests create disposable local repositories and stub GitHub responses.
uv sync --locked --all-groups
uv run --locked pytest
uv run --locked ruff format --check .
uv run --locked ruff check .
uv run --locked ty check
uv build
See CONTRIBUTING.md before opening a pull request. CI runs the same checks on Python 3.13 and 3.14.
Project documents
- CHANGELOG.md for release history.
- CONTRIBUTING.md for development and release steps.
- SECURITY.md for reporting a vulnerability.
License
Git Muster is available under the MIT License.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file git_muster-0.4.1.tar.gz.
File metadata
- Download URL: git_muster-0.4.1.tar.gz
- Upload date:
- Size: 13.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49ee20229ee618459ff898c4376df3e4653a36b223f88b1f34e2e8e751a019b9
|
|
| MD5 |
4fe243171876ac2484bb16c53dab8626
|
|
| BLAKE2b-256 |
deefeda55a1cf4ff578cea37a280e96e8a3549e123495d026ca267b9218c5043
|
Provenance
The following attestation bundles were made for git_muster-0.4.1.tar.gz:
Publisher:
publish-pypi.yml on olearydj/git-muster
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
git_muster-0.4.1.tar.gz -
Subject digest:
49ee20229ee618459ff898c4376df3e4653a36b223f88b1f34e2e8e751a019b9 - Sigstore transparency entry: 2647374645
- Sigstore integration time:
-
Permalink:
olearydj/git-muster@4911ee8e0d80a43b76e91894ff7ff77a0d3ec3a3 -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/olearydj
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@4911ee8e0d80a43b76e91894ff7ff77a0d3ec3a3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file git_muster-0.4.1-py3-none-any.whl.
File metadata
- Download URL: git_muster-0.4.1-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f147e21d682dfcb7d348c7bd60c273a4db6333ce5fa5b1c4b83401834d1869f0
|
|
| MD5 |
58f01dc73c280ab287d96bddd0cd8bd8
|
|
| BLAKE2b-256 |
79b8d35021a582ceb201bf641387e029d4ad0308585be47c8cafcc896c977405
|
Provenance
The following attestation bundles were made for git_muster-0.4.1-py3-none-any.whl:
Publisher:
publish-pypi.yml on olearydj/git-muster
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
git_muster-0.4.1-py3-none-any.whl -
Subject digest:
f147e21d682dfcb7d348c7bd60c273a4db6333ce5fa5b1c4b83401834d1869f0 - Sigstore transparency entry: 2647374660
- Sigstore integration time:
-
Permalink:
olearydj/git-muster@4911ee8e0d80a43b76e91894ff7ff77a0d3ec3a3 -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/olearydj
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@4911ee8e0d80a43b76e91894ff7ff77a0d3ec3a3 -
Trigger Event:
release
-
Statement type: