Dev In The Mountain Header
A Developer In The mountains having fun

GitButler: A Modern Git Client for Better Workflow

Why Use GitButler?

GitButler is a revolutionary Git client that reimagines how developers interact with version control. Instead of forcing you to work within Git's traditional constraints, GitButler adapts to how you actually work.

Key Benefits

Virtual Branches - The game-changing feature of GitButler is virtual branches. Unlike traditional Git branches, virtual branches allow you to:

  • Work on multiple features simultaneously without switching contexts
  • Organize changes into logical groups as you work
  • Move changes between branches with simple drag-and-drop

No More Stashing - Say goodbye to git stash. With GitButler, you can switch contexts and work on different features without stashing changes or committing half-finished work.

Visual Workflow - GitButler provides an intuitive visual interface that makes complex Git operations simple:

  • See all your work-in-progress changes organized by feature
  • Drag and drop hunks or files between branches
  • Stage, unstage, and commit with visual clarity

Safe Experimentation - Virtual branches let you experiment freely without fear of losing work or creating messy branch histories.

Core Concepts

Virtual Branches

Virtual branches are GitButler's signature feature. They exist in your working directory simultaneously, allowing you to:

  1. Create multiple virtual branches - Each represents a different feature or task
  2. Assign changes dynamically - Move uncommitted changes between virtual branches
  3. Apply selectively - Choose which virtual branches are active in your working directory
  4. Commit independently - Each virtual branch can have its own commit history

Think of virtual branches as "workspaces" that let you organize your changes before committing, rather than committing everything to a single branch.

The Workspace

GitButler's workspace shows:

  • All your virtual branches
  • Uncommitted changes organized by virtual branch
  • Files and hunks that can be reassigned
  • A clear view of what will be committed where

Integration with Git

GitButler doesn't replace Git - it enhances it:

  • Virtual branches map to real Git branches when you're ready
  • You can still use your favorite Git commands alongside GitButler
  • Everything is stored in standard Git format
  • Works with existing Git repositories and hosting platforms (GitHub, GitLab, etc.)

Getting Started

Installation

GitButler is available for macOS, Linux, and Windows:

# macOS (Homebrew)
brew install gitbutler

# Or download from gitbutler.com

Looking for command-line usage? Check out the GitButler CLI Quick Reference for a comprehensive guide to GitButler's CLI commands.

Basic Workflow

  1. Open Your Repository

    • Launch GitButler and open an existing Git repository
    • GitButler will analyze your current state
  2. Create Virtual Branches

    • Click "New Virtual Branch" for each feature or task
    • Name them descriptively (e.g., "user-authentication", "api-refactor")
  3. Assign Changes

    • As you code, GitButler detects changes
    • Drag files or hunks to the appropriate virtual branch
    • Unassigned changes stay in a default branch
  4. Commit and Push

    • Click commit on any virtual branch when ready
    • Push to create or update the corresponding Git branch
    • Changes are sent to your remote repository
  5. Apply/Unapply Branches

    • Toggle virtual branches on/off to control what's in your working directory
    • Unapplied branches are safely stored but not in your workspace

Common Use Cases

Working on Multiple Features

Instead of:

git stash
git checkout feature-a
# work on feature-a
git commit -m "progress"
git checkout feature-b
git stash pop
# work on feature-b

With GitButler:

  • Create virtual branches for both features
  • Switch between them instantly
  • All changes visible and organized

Code Review Iteration

When addressing review feedback:

  • Keep your main feature work in one virtual branch
  • Create separate virtual branches for review fixes
  • Easily see and commit only the review changes

Experimental Changes

Testing an idea:

  • Create a virtual branch for the experiment
  • If it works, commit and push
  • If not, simply delete the virtual branch
  • Your other work remains untouched

Advanced Features

Hunk Management

  • Split changes at the hunk level (individual code blocks)
  • Move hunks between virtual branches
  • Partially stage changes across multiple features

Branch Stacking

  • Create dependent virtual branches
  • Build features on top of each other
  • Manage complex branch hierarchies visually

Collaboration

  • Push virtual branches as regular Git branches
  • Team members see normal Git branches
  • Pull requests work as expected
  • Merge back to main when ready

Tips and Best Practices

Organize Early - Create virtual branches at the start of your work session, not after mixing changes.

Descriptive Names - Name virtual branches clearly to track what each contains.

Commit Often - Virtual branches make it easy to commit logical units of work frequently.

Review Before Pushing - Use virtual branches to organize and review your changes before making them public.

Clean Up - Delete virtual branches after merging to keep your workspace tidy.

GitButler vs Traditional Git

Traditional GitGitButler
One branch at a timeMultiple virtual branches simultaneously
Stash to switch contextsNo stashing needed
Command-line focusedVisual and intuitive
Changes belong to current branchDynamically assign changes
Complex rebasing/cherry-pickingDrag-and-drop hunks

Conclusion

GitButler represents a paradigm shift in Git workflow management. By introducing virtual branches, it removes the friction of context switching and enables a more natural, flexible development process. Whether you're juggling multiple features, responding to urgent fixes, or simply organizing your work, GitButler adapts to your needs rather than forcing you to adapt to Git's constraints.

Give GitButler a try if you:

  • Work on multiple features simultaneously
  • Find yourself stashing frequently
  • Want better organization of work-in-progress
  • Prefer visual tools over command-line Git
  • Want to experiment without branch clutter

Learn more at gitbutler.com

More places to find me
Mental Health
follow me on Mastodon