惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
IT之家
IT之家
F
Fortinet All Blogs
腾讯CDC
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
GbyAI
GbyAI
Recent Announcements
Recent Announcements
博客园 - 叶小钗
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 司徒正美
Y
Y Combinator Blog
人人都是产品经理
人人都是产品经理
N
Netflix TechBlog - Medium
博客园_首页
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
爱范儿
爱范儿
F
Full Disclosure
博客园 - 【当耐特】
V
V2EX
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
D
DataBreaches.Net
Martin Fowler
Martin Fowler
Cisco Talos Blog
Cisco Talos Blog
大猫的无限游戏
大猫的无限游戏
T
The Blog of Author Tim Ferriss
S
Schneier on Security
Latest news
Latest news
S
Secure Thoughts
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hugging Face - Blog
Hugging Face - Blog
P
Proofpoint News Feed
Apple Machine Learning Research
Apple Machine Learning Research
T
Tenable Blog
Blog — PlanetScale
Blog — PlanetScale
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Cyberwarzone
Cyberwarzone
Spread Privacy
Spread Privacy
K
Kaspersky official blog
L
Lohrmann on Cybersecurity
宝玉的分享
宝玉的分享
A
About on SuperTechFans
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
P
Palo Alto Networks Blog
Microsoft Azure Blog
Microsoft Azure Blog

Butler's Log

Agentic Version Control Benchmarks Grit: rewriting Git in Rust with agents Git Merge 2026 Agent-safe Git with GitButler We’ve raised $17M to build what comes after Git Announcing the GitButler CLI for Linux The Great CSS Expansion A couple of git nits Simplifying Git by Using GitButler GitButler 0.19 - "Commander Keen" But Head: Crafting a Custom Font MCP vs RAG: Two Very Different Ways to Gain Context Getting Started With GitButler Agents Using the GitButler MCP Server to Build Better AI-Driven Git Workflows Using GitButler With Multiple GitHub Accounts Advent of Code! Upcoming GitButler Events Use GitButler for your Gerrit workflow Integrating GitButler and GitHub Enterprise Butler Flow: shipping code faster (but less like Alfred, more like CI on steroids) - Part 3 Butler Flow: shipping code faster (but less like Alfred, more like CI on steroids) - Part 2 Butler Flow: shipping code faster (but less like Alfred, more like CI on steroids) - Part 1 Grid Happens: Because Flexbox Wasn’t Enough Using Cursor Hooks for automatic version control Deep Dive into the new Cursor Hooks A Responsive Item Counter with CSS only GitButler 0.16 - "Sweet Sixteen" GitButler's Claude Code tab GitButler's Annual Open Source Pledge Report Git Mini Summit 2025 Videos Automate Your AI Workflows with Claude Code Hooks Managing Multiple Claude Code Sessions Without Worktrees GitButler 0.15 - "Quirky Quinceañera" 20 years of Git. Still weird, still wonderful. GitButler's new patch based Code Review (Beta) Going down the rabbit hole of Git's new bundle-uri How to do patch-based review with git range-diff How Core Git Developers Configure Git Why is Git Autocorrect too fast for Formula One drivers? Stacked Branches with GitButler Git Merge 2024 Talks are Up GitButler 0.13 - "Lucky Baseball" Fearless Rebasing Git Merge 2024 Why GitHub Actually Won GitButler is joining the Open Source Pledge The New Era of Town Hall Chat The Future of Open Source GitButler is now Fair Source Git Merge 2024 GitButler 0.12 - "Stingy Baker" The Birth of THE MERGE GitButler for Windows Fixing up Git with Autosquash The Git Zeitgeist Git Worktrees and GitButler DevWorld Git Slides Git Tips and Tricks Git Tips 1: Oldies but Goodies Git Tips 2: New Stuff in Git Git Tips 3: Really Large Repositories FOSDEM Git Talk Opening Up GitButler Debugging Tauri in VS Code Advent of GitButler Code Signing Commits in Git, Explained Virtual Branches Alpha Our We Are Developers Adventure Building Virtual Branches DevDays in Vilnius The Future of Software and Open Source Introducing GitButler
Introducing the GitButler CLI
Scott Chacon · 2026-02-06 · via Butler's Log

The Git command line interface is now more than 20 years old and it's showing. GitButler has been modernizing the interface to Git projects for our desktop client for years now, and today we're releasing a command line tool that can do all the same powerful things, drop in compatible with all your existing Git projects.

A quick tour through a typical workflow with the new GitButler CLI.

The GitButler CLI is a massively simpler, more user friendly and powerful Git interface. It can do tons of things that Git either struggles with or simply cannot do at all, all with a both beautiful and scripting-friendly interface.

Such as...

You can check out our new CLI tutorial to learn all about it in detail, or check out our commands overview, but here is the quick rundown of the fun parts.

If you have the desktop client installed, you can add the CLI by going to your General Settings in the GitButler GUI and clicking "Install CLI", which will create a global symlink.

You can also install it via Homebrew with a simple brew install gitbutler

brew install gitbutler

Or via a simple bash command (also currently Mac only, but we're working on it...)

curl -fsSL https://gitbutler.com/install.sh | sh

Then you can go into any existing Git project and run but to set it up and start working with all these extra Git features.

The but CLI can do much of what the GUI can do and many of the operations should be familiar to you from the Git CLI. For example, you can run but status, but commit, but push, and but branch.

However, there are many things that GitButler can do that Git itself cannot - working with parallel branches, restoring to a previous point, auto-absorbing work, easily editing your commits.

Let's take a super quick overview of some of the cool things you can do with the but CLI.

The main command that you will use is but status, which will run by default when you run but with no subcommand. It runs a combination of a shortlog and status of uncommitted file modifications.

Example output of but status command. Here you can see two branches stacked and one parallel branch also applied.

This is very cool, because it shows you roughly what a git status would - uncommitted changes, but it also shows you the current branches and stacks that you're working with.

Imagine you're working on a feature and you spot a bug. Do you stash and fix? Do you fix it in your feature branch?

With GitButler, you can run but branch new bug-fix to create a parallel branch and commit the bug fix to that branch without stashing your feature. We keep both branches in your working directory while keeping them logically seperated.

You can also base a new branch off of an existing one if there are dependencies by running but branch -a <target> <new-branch>, which stacks the new branch and links them properly when opening Pull Requests in GitHub.

Here is an example of a stacked PR made with GitButler on PostHog's Twig project:

Managing stacked branches and pull requests in GitButler made easy

Managing stacked branches and pull requests in GitButler made easy

With GitButler's stacked branches, there is no need to move up and down the stack to make changes and restack manually. You can easily insert commits, move commits around or absorb work into exsting commits anywhere in the stack.

For example, modifying commits on the bottom branch of a stack will automatically rebase everything above it properly without any config settings, autosquash, fixup commits, other Git shenanigans needed.

All but commands that modify state will automatically create an operations log entry that you can view and restore to any save point whenever you want. You can even run but undo as a quick way to undo the last thing you did.

The modern workflow often involves opening Pull Requests on GitHub or Merge Requests on GitLab. Unlike Git, the but tool has support for interacting with these forges and their review systems built in.

Running the but pr command will prompt you to open PRs on any applied branches that don't have one associated yet and automatically open them.

GitButler will also periodically do a background check for CI status for any branches with an associated PR. You can see this in but status and you can even get the PR URL with the -v (verbose) option:

Don't fancy yourself a git rebase -i guru? No problem, we've got:

  • but reword - easily edit any commit message
  • but uncommit - move all changes from any commit back to uncommitted
  • but amend - absorb new modifications into any existing commit
  • but move - reorder commits or move them between branches
  • but squash - combine multiple commits into one

My favorite one, however, is but absorb, which will take all uncommitted changes and try to find the most logical commit in your workspace to absorb each hunk into.

All of the commands are designed to be very user friendly when we have an interactive terminal, but you can also very easily script everything by passing the --json or -j option to anything. For example, here is using but show on a commit.

Now with the --json option:

JSON

❯ but show --json ed498855
{
  "commit": "ed498855b62c51d88250a0b9184e2b6983ab106a",
  "changeId": "qvrnqwpzoxrxvpovpzpyrvsxyzvwokop",
  "author": {
    "name": "Scott Chacon",
    "email": "schacon@gmail.com"
  },
  "committer": {
    "name": "Scott Chacon",
    "email": "schacon@gmail.com"
  },
  "date": "2026-02-04 09:34:58 +0100",
  "message": "Add update-manpages script and pnpm command\n\nProvide a pnpm script to regenerate CLI manpages from the external\nGitButler repo. \n\n",
  "files": [
    {
      "path": "package.json",
      "status": "modified"
    },
    {
      "path": "scripts/update-manpages.sh",
      "status": "added"
    }
  ]
}

You can do this with anything - committing, status, diffing, etc. Just throw a -j in there and you get parseable data (or, data your agent can very easily work with).

Speaking of which, if you want to give your coding agent a much more powerful toolkit for version control, you can easily install skills with but skill install.

This is just the beginning. We're excited to keep improving our powerful CLI, capable of so many things Git struggles to do or can't do at all, while being able to design for both a better human experience and a better scripting and agentic interface.

Try it out and let us know what you think (on Discord).

Scott Chacon

Written by Scott Chacon

Scott Chacon is a co-founder of GitHub and GitButler, where he builds innovative tools for modern version control. He has authored Pro Git and spoken globally on Git and software collaboration.