GitMenuBar: Your Git Commands, Right Where You Need Them
I have a love-hate relationship with the macOS menu bar. I love that it is a quiet, ambient place where useful status lives. I hate that every app wants a permanent icon there, and the result is a cluttered row of glyphs I never look at. GitMenuBar is the rare menu bar app I have actually kept enabled. The app shows a tiny git status icon in the menu bar: a checkmark when the working tree is clean, a colored dot when something is uncommitted, a number when there are unpushed commits. The click reveals a small popover with the usual git actions: pull, push, commit, branch switch, log view, diff. The whole app is around 12 megabytes, free, open source, and does the one job well. I have been using it for 18 months. This is the writeup of what I use, what I do not use, and the trade-offs.
What the app actually does
GitMenuBar is a small Swift app that watches the git status of your current repository and surfaces a few common actions in the menu bar. The app runs as a status item, which is the macOS term for a small icon in the top-right of the screen. The icon is a checkmark when everything is clean, a yellow dot when files are modified, a red dot when there are conflicts, and a number when there are unpushed commits. The click opens a popover. The popover has buttons for pull, push, fetch, branch switch, log view, and a few more. The app also has a “current branch” indicator. The whole UI is a small popover that does not steal focus. The app does not run in the dock. The app does not show a window by default. The app is exactly the menu bar item I want, and nothing more.
The killer feature for me is the working-tree status. The status icon is a glanceable check on whether I left something uncommitted. The check is faster than opening a terminal, running git status, and parsing the output. The check is also persistent: I can see the icon from any app, any time, without switching focus. I have caught myself committing before closing my laptop, which is a habit I have wanted to break for years.
The features I use every day
Three features are part of my daily workflow. The first is the pull-and-rebase shortcut. The keyboard shortcut is configurable. I have it bound to Cmd+Shift+G. The action is “git pull –rebase” with the default config. The shortcut is faster than opening a terminal, and it works in any app, any time. The second is the branch switcher. The popover has a list of local and remote branches. Click on a branch, the app runs git checkout, and the working tree updates. The branch switcher is not as fast as a terminal for typing branch names, but it is faster than “open a terminal, list the branches, type the name.” The third is the log view. The popover has a button that opens a small log window with the last 20 commits. The log is read-only. The log is for context. I do not write commits from the popover; I use a terminal for that.
The features I do not use
Three features I do not touch. The first is the in-popover commit editor. The popover has a “commit” action that opens a small text field. The field is too small for the kind of detailed commit messages I write. I always switch to a terminal for commits. The second is the stash management. The popover has stash actions. I have never used them. I prefer to use git stash from a terminal where I can see the diff. The third is the diff view. The popover has a “show diff” action that opens a small window. The window is too cramped for a real diff review. I use a terminal and a pager for that. The result is that the popover is for status, branch switching, and quick pull/push. Anything more involved goes through a terminal.
The trade-offs of menu bar git apps
The trade-offs of any menu bar git app are the same, and GitMenuBar is honest about them. The first is the “I am in a half-state” problem. The app does not know about your worktrees, your submodules, your detached HEAD, or your interactive rebase. The app knows about the basic state: clean, modified, conflicted, unpushed. Anything more exotic, and the app’s status is wrong. The second is the “I have a lot of repos” problem. The app only watches one repo at a time. The app picks the repo from the most recent terminal session, or you set the repo manually in the preferences. The app does not have a “watch all my repos” mode. The third is the “the menu bar is full” problem. macOS allows only so many status items before the menu bar starts to overflow. If you have a lot of apps, the GitMenuBar icon can be hidden by the overflow menu. The overflow is a macOS feature, not a GitMenuBar bug.
A fourth trade-off that is subtle is the app’s reliance on a single repository. The app watches the repository that was most recently active in your terminal. The result is that if you switch projects (close the terminal, open a new one in a different project), the app has to re-detect the new project. The detection is fast (a few hundred milliseconds) but the icon flickers during the switch. The flicker is annoying. The fix is to use iTerm2 or another terminal that has a hook for “current working directory changed.” I have not bothered to set up the hook. The flicker is mild enough that I live with it.
What GitMenuBar is good at and what it is not
GitMenuBar is good at the everyday status and the everyday actions. The list of cases where the app shines:
- A developer who works on one or two repos at a time and wants a glanceable status
- A developer who wants a keyboard shortcut for pull, push, and branch switch
- A developer who is tired of opening a terminal just to check if the working tree is clean
- A developer who has a clean enough workflow that the basic status is enough
A short list of cases where the app is the wrong tool:
- A developer who works on 10 repos simultaneously (the app only watches one)
- A developer who uses worktrees, submodules, or other advanced git features
- A developer who writes detailed commit messages (the in-popover editor is too small)
- A developer who uses a GUI for everything (the popover is not a full GUI)
My honest verdict after 18 months
GitMenuBar is the rare menu bar app I have not disabled. The app does one thing, does it well, and stays out of my way. The status icon is the kind of glanceable information I want from a menu bar app. The keyboard shortcuts are faster than the terminal for the actions I do most. The features I do not use are not in the way. The app is free, open source, and has been stable across macOS upgrades. The app is a small piece of software that does a small job well. That is the highest praise I can give a menu bar app.
The 18-month mark is the real test. Most menu bar apps get disabled after a week or two because the noise-to-signal ratio is bad. GitMenuBar has the right ratio. The icon is informative. The popover is useful. The shortcuts save time. The app is part of my daily workflow, and removing it would feel like losing a sense. For a 12-megabyte, free, open-source app, that is a strong recommendation.