Repository navigation
Changes and Commits
The Changes sidebar lists every file you changed, in every repository of the workspace. From here you pick what goes into the next commit, write a message and commit.
A few words first. Staging a file means putting it on the list for the next commit. The index (or staging area) is that list. A commit is a saved snapshot of the staged files with a message.
- Click the Changes icon at the top of the left activity bar.
- Or choose View > Changes, or press Shift+Cmd+G while you are not typing in an editor (there it is Find Previous).
- Press Option+Cmd+B to hide or show the left sidebar.
The Changes icon shows the number of changed files, in red while any file has a conflict. The x in the sidebar title hides the sidebar.

Changes grouped by repository: payments-api is folded and merging, storefront shows its actions, its Staged and Changes groups.
Each repository has up to three groups:
- Conflicts: files a merge, rebase or similar left in conflict. Click one to open the Merge Tool, or click Resolve... on the group for the Conflicts dialog.
- Staged: files that will go into the next commit.
- Changes: files changed on disk but not staged yet, including new untracked files.
A file can be in both Staged and Changes when you changed it again after staging.
Every row shows a status letter (M modified, A added, D deleted, R renamed, U untracked, T type changed, C conflicted), the file name and its folder. Hover a row for its full path. A small LFS or submodule tag marks files kept in Git LFS and submodules. Click a group header to fold it.
With several repositories, each one gets a header. It shows the repository's name (tagged submodule or worktree when it is one) and its number of changed files. While an operation runs, a badge such as Merging or Rebasing shows too. On the right sit its own buttons (branch, Sync, Commit, Refresh and ...), explained in Repository Actions. Click the header to fold the repository. The active repository has a colored bar on the left. With one repository, those buttons sit in the sidebar title instead; with several, the title has Refresh All.
Repositories with nothing to commit are collected under No Changes at the bottom, folded when there are more than three. Each row has a folder icon to make it the active repository, and the same buttons without Commit.
With nothing to commit at all, the list says Working tree clean. The list updates by itself when files change, wherever you edit them.
Hover a row to see its buttons:
- + stages the file.
- - (on a staged file) unstages it.
- The curved arrow discards the changes.
- On a conflicted file, the merge icon opens the Merge Tool.
Group headers have the same buttons for all their files (Stage all, Unstage all, Discard all). For the whole repository, use ... > Changes.
Shortcuts on the selected row:
- Double-click, Space or Enter stages a file in Changes, or unstages a file in Staged.
- Delete (or Backspace) discards the changes of a file in Changes.
- Up and Down arrows move through the list.
When you stage or unstage the selected file, the selection follows it to its new group, so the diff stays on screen. To stage only part of a file, open its diff and use the per-change buttons. See Diffs.
Discarding throws your edits away and puts the file back as it was in the index. For an untracked file it deletes the file. Nibtree always asks first, and says how many files will be lost. This cannot be undone.
On a file in Changes: Stage and Discard Changes...; on a staged file: Unstage. Both also have Add to .gitignore (see Ignoring Files), Shelve Changes... (see Shelf) and Copy Path, which copies the path inside the repository. On a conflicted file: Resolve in Merge Tool, Show All Conflicts... and Copy Path.
On a repository header you get the full ... menu, then Resolve Conflicts... (when there are conflicts), Set as Active Repository and Copy Repository Path.

The commit box at the bottom of Changes: the repository picker, a message, Commit Options, the Commit button with its arrow, and Sync Changes.
- Stage the files you want.
- Type a message in the box at the bottom. Git > Commit... (Cmd+K) jumps here too.
- Click Commit, or press Cmd+Enter in the message box.
The line next to the button says what will happen, for example 1 file staged or 2 conflicted files. The button stays disabled until there is something to commit, and its tooltip says why, such as "Enter a commit message". After a commit the message box is cleared.
Commits run through your own git, so commit hooks and commit signing work as usual. If a hook fails, its message is shown.
With more than one repository, the box starts with Commit to, a list of the repositories that have changes (with their staged count, such as storefront, 1 staged), and the branch. It follows the repository you last worked in (for example where you last selected or staged a file), or the active one. The message box says Message for storefront so you know where the commit goes. Each repository keeps its own draft message. To give every repository its own commit box instead, see Commit Box Layout.
Amending replaces the last commit with a new one, for example to fix a typo in its message or add a forgotten file.
- Tick Amend. If the message box is empty, it fills in the last commit's message. Untick it and that message goes away again, unless you edited it.
- Change the message, and stage more files if you like.
- Click Amend Commit.
With nothing staged, amend changes only the message ("Amend message only"). Amend is not available in a repository that has no commits yet.
The arrow next to Commit offers Commit & Push, Commit & Sync and Commit (Amend). The gear left of it opens Commit Options: sign-off, another author, GPG signing and skipping hooks. Both are explained in Commit Options.
When your branch is ahead of or behind its upstream (the server branch it follows), a Sync Changes button under the commit box shows the counts, for example Sync Changes 1 with an up arrow. It pulls, then pushes. A branch that was never pushed shows Publish Branch instead. See Repository Actions for details.
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