Repository navigation
Branches and Tags
A branch is a separate line of work, so you can try something without touching main. A tag is a fixed name for one commit, usually a release like v1.1.0. This page shows how to switch, create, merge, rebase, rename and delete branches, and how to use tags.
- Click the branch icon in the left activity bar (Branches and Stashes).
- Or press Shift+Cmd+E.
The title bar of the sidebar has Refresh, and an X that hides the sidebar (Option+Cmd+B does the same).

Local and remote branches, tags, stashes and worktrees of the active repository.
The sidebar shows the active repository in five sections: Local, Remote, Tags, Stashes (see Stashes) and Worktrees (see Worktrees). Each section and folder shows how many items it holds. Click a section or folder to fold it. Tags starts folded, and Nibtree remembers what you folded.
- Branch names with slashes are grouped into folders.
fix/tax-ratessits in a fix folder. - Remote branches are grouped per remote, such as origin.
- The branch you are on has a check mark and bold text.
- A local branch shows how many commits it is ahead (up arrow: yours, not pushed yet) and behind (down arrow: on the server, not pulled yet) its upstream, the remote branch it follows. Hover the name for details, such as "main, at 1058a1c, tracking origin/main, 1 ahead".
- An empty section says so, for example No tags or No stashes.
Type in Filter branches and tags at the top to narrow the list. It matches branch and tag names and stash messages, and opens every folder with a match. Press Esc or click the x to clear it.
- Double-click a local branch, or select it and press Enter.
- Or click the branch name in the header and pick one from the list. The branch you are on is marked (current).
- Or use the Branches popup: click a repository's branch button in Changes, or choose Git > Branches.... It works for any repository, not only the active one, and offers more for each branch, such as Compare, Update and Push.
Double-clicking a remote branch such as origin/fix/tax-rates switches to your local branch of the same name, or creates one that tracks it. A note tells you which, for example Created fix/tax-rates tracking origin/fix/tax-rates.
If you have uncommitted changes that would be overwritten, git refuses to switch and the message tells you why. Commit or stash them first.
- Click the + on the Local section (a new branch from HEAD, the commit you are on now). You can also right-click Local, or open the header's branch menu, and choose New Branch..., or choose Git > New Branch....
- Type a name, for example
feature/free-shipping. - Leave Checkout branch ticked to switch to it right away.
- Click Create.
The dialog tells you when a name is not valid (spaces, .. or characters such as ~ ^ : ? *) or already taken. To start a branch somewhere else, right-click a branch or tag and choose New Branch from '...'..., or use New Branch Here... on a commit in the Log. From a remote branch, the name is filled in for you, such as fix/tax-rates.

The actions for a local branch.
On a local branch:
- Checkout switches to it (greyed out for the branch you are on).
- New Branch from 'name'... starts a new branch at the same commit.
- Merge 'name' into 'main' brings that branch's commits into the branch you are on (a merge joins two lines of work into one).
- Rebase 'main' onto 'name' replays your current branch's commits on top of that branch, for a straight history.
- Rename... gives it a new name, checked the same way as a new one.
- Delete removes it.
Merge, Rebase and Delete are greyed out for the branch you are on. Merge and Rebase here run right away with git's defaults; for options such as --no-ff or --squash, use Git > Merge... or Git > Rebase... (see Git Dialogs). On a remote branch you get Checkout, New Branch from..., Merge and Rebase. On a tag: Checkout, New Branch from... and Merge.
Merge and Rebase are greyed out while a merge, rebase, cherry-pick or revert is still in progress, and every action waits while another operation runs. If either stops on conflicts, Nibtree opens the Conflicts dialog. See Resolving Conflicts.
- Right-click the branch and choose Delete (or select it and press Delete).
- Confirm.
You cannot delete the branch you are on. If the branch has commits that are not merged into its upstream or your current branch, git refuses at first, and Nibtree asks again (Branch Not Fully Merged) with Force Delete. Only say yes if you are sure you no longer need those commits.
This deletes only your local branch, not the one on the server.
Tags are listed under Tags, such as v1.0.0 and v1.1.0. Right-click one to:
- Checkout a tag to look at the code as it was at that release. This leaves you on no branch (a "detached HEAD"), so create a branch if you want to keep new commits. You are asked first, and the header then shows HEAD detached at and the short hash.
- Start a branch from it, for example to fix a bug in an old release.
- Merge it into your current branch.
To tag the commit you are on, choose Git > New Tag..., or ... > Tags > Create Tag... on a repository in Changes. Type a name such as v1.2.0. Add a message to make an annotated tag (one with its own message, author and date), or leave it empty for a lightweight tag (just a name). The same Tags submenu has Delete Tag..., which deletes your local copy after asking, and Push Tags, which sends all local tags to the server. See Repository Actions.
Click in the list, then:
- Up, Down, Home and End move the selection.
- Right and Left open and close sections and folders. Left on a branch jumps to its folder.
- Enter checks out the selected branch or tag. On a section or folder, Enter or Space folds it.
- Delete or Backspace deletes the selected local branch (after asking).
- Shift+F10 (or the menu key) opens the right-click menu.
- In the filter box, Down or Enter jumps to the first match.
These pages are generated from docs/wiki. To correct something, open a pull request against the source file; edits made here are overwritten.
Using Nibtree
- Getting Started
- Welcome Screen
- Workspaces
- Files Panel
- File Operations
- File Icons
- Rounded Panels
- Editor and Tabs
- Pin Reorder and Wrap Tabs
- Single Tab Title
- Split Editor
- New File and Unsaved Changes
- Unload Hidden Tabs
- Editing Code
- Code Appearance
- Markdown Editor
- Image and PDF Preview
- Search Everywhere
- Recent Files
- Navigation Bar
- Find and Replace
- Changes and Commits
- Sign In Prompts
- Commit Box Layout
- Repository Actions
- Commit Options
- Ignoring Files
- Diffs
- Inline Diffs
- Staging View
- Revert a Change
- Resolving Conflicts
- Merge Tool
- Blame
- History and Log
- Merge Commits
- Branches and Tags
- Branches Popup
- Remotes
- Stashes
- Shelf
- Git Menu
- Git Dialogs
- Interactive Rebase
- Worktrees
- AI Agents
- AI Tasks
- AI Usage
- Keep Computer Awake
- Submodules
- Git LFS
- GitHub
- Git Console
- Terminal
- Terminal Features
- Scripts
- Navigation
- Menus
- Settings
- Settings Search
- Color Themes
- Settings Terminal and Automation
- Settings Files
- Updates
- Status Bar and Help
- Notifications
- Memory Use
- Clear Cache
- MCP and CLI
- Git Mergetool
- Keyboard Shortcuts
- Keyboard Shortcuts Editor
- Troubleshooting
- Troubleshooting Git
Developers
- Developer Guide
- Architecture
- Project Layout
- Backend
- How Folder Watching Works
- Folder Watching Bugs We Fixed
- How Workspace Files Work
- How the Preview Scheme Works
- Backend Services
- How Terminal Features Work
- Terminal Bugs We Fixed
- Frontend
- How the Rich Markdown Editor Works
- Rich Markdown Bugs We Fixed
- Git Menu Links
- Menu Keys and Routing
- Frontend Modules
- Blame Bugs We Fixed
- Project Color And Title Bar
- One Diff View
- Diff Bugs We Fixed
- Merge Tool Layouts
- Merge Tool Bugs We Fixed
- Color Theme Bugs We Fixed
- How the Connected Diff Works
- Rounded Panels Bugs We Fixed
- Update Bugs We Fixed
- Status Bar Bugs We Fixed
- MCP and CLI Bugs We Fixed
- Repository Actions Bugs We Fixed
- How the Changes Tab Works
- CodeMirror Patterns
- How the Cursor Works
- How Editor Features Work
- How the Path Bar Works
- Commands and Events
- Settings Reference
- Commands Workspace and Changes
- Commands Branches and Remotes
- Commands History and Extras
- Commands App and Tools
- Testing
- Test Suites
- Debugging
- Debugging with MCP
- Measuring Setting Memory
- How Terminal Memory Is Measured
- How Markdown Diagrams Work
- Releases and CI
- Publishing the Wiki
- Versioning and Changelog
- Browser Version Packages
- Browser Release Checks
- Docker Image
- Platforms and Signing
- Windows Support
- Windows Bugs We Fixed
- Windows MCP and CLI
- Docs and Screenshots
- UI Library
- UI Library MCP
- UI Library Bugs
- UI Library Migration
- Contributing
How features work
- Welcome screen
- Workspaces and folders
- Files panel
- File operations
- File icons
- Editor and tabs
- Pin, reorder and wrap tabs
- Single tab title
- Split editor
- New File and unsaved changes
- Unload hidden tabs
- Editing code
- Code appearance
- Markdown editor
- Image and PDF preview
- Search Everywhere
- Recent Files
- Navigation Bar
- Find and replace
- Changes and commits
- Sign-in prompts
- Commit box layout
- Repository actions
- Commit options
- Ignoring files
- Diffs
- Inline diffs
- Staging view
- Revert a change
- Resolving conflicts
- Merge tool
- Blame
- History and log
- Merge commits
- Commit tabs
- Branches and tags
- Branches popup
- Remotes
- Stashes
- Shelf
- Git menu
- Git dialogs
- Interactive rebase
- Worktrees
- AI agents
- AI usage
- Keep computer awake
- AI tasks
- Submodules
- Git LFS
- GitHub account
- Git Console
- Back and Forward
- Integrated terminal
- Scripts tool window
- Menu bar
- Settings
- Search in Settings
- Color themes
- Rounded panels
- Updates and release channels
- Status bar and help links
- Notifications
- Memory readout and memory log
- Clear Cache
- MCP server and command line tool
- git mergetool mode