A dependency-free bash/zsh script that shows a live, one-screen view of the git status of many repositories at once — current branch, whether you have commits to push or pull, and any staged / unstaged / untracked changes.
No watch, no extra tools required (handy on macOS, where watch isn't
installed by default).
./git-status-dashboard.sh <repo> [<repo> ...]Because the script just takes a list of directories, your shell's globbing expands to multiple repos automatically:
# every immediate subdirectory of ~/git
./git-status-dashboard.sh ~/git/*/
# every repo under two parent folders
./git-status-dashboard.sh ~/git/dbllc/*/ ~/work/*/
# mix globs and explicit paths freely
./git-status-dashboard.sh ~/git/dbllc/*/ ~/dotfilesThe trailing slash (*/) restricts the glob to directories. Non-git or
missing directories are shown with a clear message rather than skipped, so a
too-broad glob is harmless.
| Flag | Description |
|---|---|
-n, --interval SECONDS |
Refresh interval for the live view (default: 2). |
-1, --once |
Render once and exit (no live loop). Good for scripts/logs. |
-h, --help |
Show usage. |
./git-status-dashboard.sh -n 5 ~/git/*/ # refresh every 5s
./git-status-dashboard.sh -1 repoA repoB # print once and exitPress Ctrl-C to quit the live view (the cursor is restored on exit).
fullsend-native main ↑1 ●2 staged ✚1 changed …1 untracked
web feature/login ↑3 ↓1 clean
api detached@a1b2c3d no upstream ⚑1 stash
- Branch (blue) — or
detached@<sha>when in a detached-HEAD state. - Tracking vs upstream:
↑N— N commits ahead (waiting to be pushed)↓N— N commits behind (waiting to be pulled)in sync— level with upstreamno upstream— branch has no tracking branch configured
- Working tree:
●N staged— changes staged for commit✚N changed— modified but unstaged…N untracked— new, untracked files⚑N stash— entries in the stashclean— nothing to do
- Status is read locally only — the script does not run
git fetch, so ahead/behind counts reflect your last fetch or pull. - Colors auto-disable when output is piped to a non-terminal, so
./git-status-dashboard.sh -1 ~/git/*/ > status.txtstays plain text.