Skip to content

Staging and committing

Click the // WIP row at the top of the graph to see your changes. The details panel shows Unstaged Files, Staged Files and the commit box.

  • A file: click its Stage button, double-click it, or press S. U unstages.
  • Everything: ⇧⌘S stages all, ⇧⌘U unstages all.
  • A hunk: open the file’s diff and use Stage, Unstage or Discard on the hunk.
  • Some lines: select lines in the diff’s gutter, then stage, unstage or discard just those.

Show files as a flat list or a folder tree with the Path / Tree toggle. A folder’s menu stages, unstages, discards or stashes everything under it.

Discarding a file or lines can be undone. MyTwig keeps a copy first.

The commit box starts from your commit.template if you have one.

  • The summary counter turns amber past 50 characters and red past 72, and hints when the blank line after it is missing.
  • Co-author adds a Co-authored-by trailer for anyone in the history. Sign off adds Signed-off-by. Recent reuses one of your recent messages.
  • The ✨ button writes a message from your staged changes with the AI provider you set up. See AI help.
  • Amend changes the last commit instead.

⌘Enter commits. ⇧⌘Enter stages everything and commits. The Commit button’s options can commit and push in one go.

If a hook stops the commit, your message is kept, and Show Output shows everything the hook printed.

Set a GPG, SSH or X.509 key in Settings → Signing to sign commits and tags by default. A checkbox in the commit box signs one commit or not. A commit’s details show whether its signature is verified.

The Stash button (⌥⌘S) stashes your changes. Its options can:

  • add a message,
  • keep the staged changes in place,
  • stash only what’s staged,
  • take a snapshot: a stash that leaves your changes where they are.

A single file can be stashed from its menu. Stashes show in the graph as dashed nodes above the commit they were made on, and in the left panel. Click one to see its changes; right-click to apply, pop, delete or make a branch from it; or drag it onto the working tree to apply it.

Made a fix that belongs in a commit you haven’t pushed yet? Stage it and choose Absorb Staged Changes… in the Staged Files bar or the palette. MyTwig finds the commit that last changed those lines and folds each change into it. Changes it can’t place stay staged, and the dialog tells you which and why before anything happens. Only your branch’s unpushed commits are touched. Undo puts everything back.

Split Commit… in a commit’s menu opens the split view. Give each changed line, hunk or file to one of several new commits, write their messages, and click Split Commit. Later commits are replayed on top unchanged.

Split Changes into Commits… in the palette does the same with your uncommitted changes. With an AI provider set, Group with AI proposes the commits and messages for you to check first.

Right-click an untracked file to ignore it, its extension, or its folder, in .gitignore or just for this clone in .git/info/exclude. The same menu adds common templates for Go, Node, Python, Java, Rust, Swift, C and C++ projects, operating systems and editors.

Save a commit, several commits, or your changes as a patch from their menus or Repository → Save Changes as Patch…. Repository → Apply Patch…, or dropping a patch on the window, shows the files it changes and whether it applies cleanly before applying it.