A basic workflow

Once round the loop: see what changed, choose what goes in, write the message, commit.

This is the loop you will spend most of your time in. It takes four steps, and every one of them is reversible.

The repository in the pictures has three changes waiting: a file that has been edited and already staged, a file that has been edited and not, and a file that Git has never seen.

1. See what changed

Select Working Copy in the sidebar. The middle column lists everything that is different from your last commit, grouped by what kind of difference it is.

Three changes: one staged, one modified, one Git has never seen.

Selecting a file shows its diff on the right. Read it before you stage it — that is the whole reason the diff is next to the list rather than a click away.

2. Choose what goes in

Staging is how you decide which of those changes the next commit will contain. You are not obliged to commit everything you have done.

⌥⌘A stages the file that is selected; the counter above the message field keeps the total.

Select a file and press ⌥⌘A, or use Repository ▸ Stage All (⇧⌘A) to take everything at once. Both have an opposite — ⌥⌘U and Repository ▸ Unstage All (⇧⌘U) — and unstaging never touches the file itself, only Innesta’s record of what the next commit will contain.

The mark at the right-hand end of each row does the same for one file. At rest it reports how much of that file is staged; point at the row and it becomes the action.

You can also go finer than a file: staging hunks and single lines covers taking part of a file and leaving the rest.

3. Write the message

The commit panel sits under the file list and is always there — you do not have to open a sheet to start typing. Above the message field, a counter says how many files are staged; the Commit button stays unavailable until at least one is, and until the message field has something in it.

The commit panel: staged counter, message, and the button that only lights up when there is something to commit.

If you would rather have a first draft than a blank field, the button in the message field’s top right corner writes one from the staged changes — see AI commit messages.

4. Commit

⌘↩ commits what is staged. The message field empties, the staged files leave the list, and the status bar says what happened.

Then push it, or do not: a commit is local until you send it, and Repository ▸ Sync (⇧⌘S) works out whether that means fetching, pulling, pushing or both.