but

Commit, push, branch, and manage version control with GitButler. Use for: commit my changes, check what changed, create a PR, push my branch, view diff, create…

INSTALLATION
npx skills add https://github.com/gitbutlerapp/gitbutler --skill but
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

$27

2. If new branch needed:

but branch new

3. Edit files (Edit/Write tools)

4. Refresh IDs if needed

but status -fv

5. Perform mutation with IDs from status/diff/show

but ... --status-after

## Command Patterns

- Commit: `but commit <branch> -m "<msg>" --changes <id>,<id> --status-after`

- `but commit -a` is accepted as a no-op compatibility flag; GitButler already includes unstaged changes by default.

- Commit + create branch: `but commit <branch> -c -m "<msg>" --changes <id> --status-after`

- Amend: `but amend <file-id> <commit-id> --status-after`

- Reorder commits: `but move <source-commit-id> <target-commit-id> --status-after` (**commit IDs**, not branch names)

- Stack branches: `but move <branch-name-or-id> <target-branch-name-or-id> --status-after` (**branch names or branch CLI IDs**)

- Tear off a branch: `but move <branch-name-or-id> zz --status-after` (`zz` = unassigned; branch name or branch CLI ID)

- Push: `but push` or `but push <branch-id>`

- Pull: `but pull --check` then `but pull --status-after`

## Task Recipes

### Commit files

1. `but status -fv`

2. Find the CLI ID for each file you want to commit.

3. `but commit <branch> -m "<msg>" --changes <id1>,<id2> --status-after`

   Use `-c` to create the branch if it doesn't exist. Omit IDs you don't want committed.

4. **Check the `--status-after` output** for remaining uncommitted changes. If the file still appears as unassigned or assigned to another branch after commit, it may be dependency-locked. See "Stacked dependency / commit-lock recovery" below.

### Amend into existing commit

1. `but status -fv` (or `but show <branch-id>`)

2. Locate file ID and target commit ID.

3. `but amend <file-id> <commit-id> --status-after`

### Reorder commits

`but move` supports both commit reordering and branch stack operations. Use commit IDs when reordering commits.

1. `but status -fv`

2. `but move <commit-a> <commit-b> --status-after` — uses commit IDs like `c3`, `c5`

3. Refresh IDs from the returned status, then run the inverse: `but move <commit-b> <commit-a> --status-after`

### Stack existing branches

To make one existing branch depend on (stack on top of) another, use top-level `move`:

but move feature/frontend feature/backend


This moves the frontend branch on top of the backend branch in one step.

**DO NOT** use `uncommit` + `branch delete` + `branch new -a` to stack existing branches. That approach fails because git branch names persist even after `but branch delete`. Always use `but move <branch> <target-branch>`.

**To unstack** (make a stacked branch independent again):

but move feature/logging zz

BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card