Release notes
What changed
Each release of Switchyard, newest first. From 0.1.10 the app updates itself; to install it fresh, download the latest version. Everything below is described in more detail in the documentation.
0.1.10
Switchyard now updates itself. It checks shortly after it starts and every six hours, downloads in the background, and asks before restarting. Help → Check for updates asks straight away.
Upgrading from 0.1.8 or earlier: uninstall the old Switchyard first (Settings → Apps → Installed apps). The app's ID changed in 0.1.9, when it took its studio's name, so Windows treats this as a separate program. Your open repositories and settings are kept. Copies from 0.1.10 on update themselves.
0.1.9 was never published on its own, so this covers everything since 0.1.8.
New
- Resolve conflicts in the app. When a merge, pull, rebase, cherry-pick or revert stops on conflicts, a banner names the operation and how many files are left. Take ours or theirs for a whole file — including when one side deleted it — or open a file both sides edited in the three-pane merge editor and settle each conflict on its own. Continue and Abort are in the banner.
- Stage part of a file — a hunk at a time with Stage hunk, or single lines: click lines in a diff (Shift-click for a range) and stage just those. Unstaging works the same way.
- Side-by-side compare — double-click a file to open both versions in a window of their own. Both sides scroll together, the part of a line that changed is highlighted, and every difference is marked down the right edge.
- A branch menu beside the repository name: filter your branches, switch to one that exists only on the remote, make a new one, or merge a branch into the one you are on.
- One sync button that does what the branch needs next — publish, pull, push or fetch — with every action a click away beside it. It shows how long ago the remote was last read.
- Commit and push, and Commit and sync, from the arrow beside Commit. Ctrl+Enter commits from the message box.
- Clone a repository from the repository menu, the welcome screen or Ctrl+Shift+O, with progress as it goes, and a Cancel that removes the half-made folder.
- All repositories at a glance — All repos in the top bar lists what is staged, changed, untracked, conflicted or not yet pushed in every open repository.
- Command palette — Ctrl+Shift+P finds and runs any action by typing a few letters of it.
- Cherry-pick commits onto the current branch, from the commit's menu.
- Rewrite history — reorder, reword, squash, fix up or drop the commits after any point, in one dialog.
- Go back to an earlier point — the reflog, listing where the branch has been, with what each choice would take away and bring back.
- Recent repositories in the repository menu and on the welcome screen. You can also drag a folder onto the window to open it.
- Undo a stash apply that conflicted. The stash stays in the list, and changes you had not staged are kept. Anything you had staged is reset along with the apply — the confirmation lists every file first.
- Help — the ? in the top bar, or F1, opens the documentation.
Better
- Large repositories stay smooth. Tested on 150,000 commits, nearly 2,400 branches and 22,000 changed files: while scrolling the graph, 95% of frames are drawn in 17 ms or less, and a 25,000-line diff opens without freezing the window.
- Long diffs keep the hunk's buttons in reach: the header of the hunk you are reading stays pinned at the top.
- The commit button says what it will do ("Commit 3 files"), and why it cannot yet. Amend brings the last message back to edit, and with nothing staged it rewords the last commit.
- Changes you cannot see are labelled. A line that differs only by a byte order mark, spaces at its end or its line ending says so, instead of looking as though it was replaced by itself.
- Files that are not UTF-8 show and stage correctly.
- Easier to read and to hit: text contrast meets WCAG AA in both themes, including while a button is hovered; buttons and rows are at least 24px (the panel edges you drag stay thin, and have arrow keys instead); and counts read 22,000 rather than 22000.
- The graph's text is sharper, including at display scaling such as 125%.
- While the filter box has text, each list's heading counts what it shows — Unstaged 3 of 147 — and a list the filter empties says so.
- Opening a repository selects the commit you have checked out.
- A stash shows as one row in the history, and lists its new files.
Fixed
- The app kept re-reading the repository after the first save, for as long as the window was open.
- On a narrow window, Refresh and Open sat under the window's own buttons. The top bar now keeps clear of them, and trades its labels for icons when space runs short.
- With a search on, the graph drew lines between matching commits as though they were parent and child. It now shows the commits alone.
- After switching branches, the name shown could stay on the old branch.
- Switching to a branch that shares its name with a file could be refused or misread. Switching now always means the branch.
- Publishing a branch failed in a clone whose remote is not called
origin. Pushing now goes where git itself would send it — including aremote.pushDefaultor a branch'spushRemote— and the buttons name that remote. - A renamed file showed as one path,
old => new, with an empty diff. - A file that only gained lines was listed as added.
- Binary and empty files showed a blank diff instead of saying what changed.
- Every diff ended in an extra, empty numbered line.
- Ctrl+Shift+C, which copies the files the selected commits changed, did nothing.
0.1.8
The earliest version listed here. What it does:
- The commit graph — one commit per row, branches that keep their column, a search by message, author or commit id, and more history as you scroll.
- Changes as folder trees — stage and unstage a file, a folder or everything; discard, always behind a confirmation.
- Committing — commit and amend; undo the last commit and keep its changes; revert an older one.
- Branches and stashes — create and switch branches; stash, bring back and drop.
- Fetch, pull and push, with pull by rebase, and a force push that uses a lease, so it cannot overwrite work someone else has pushed.
- A commit's details — its message, the files it changed as a tree, and each file's diff. Copy the list of files one commit or several changed, or compare the oldest of a selection with the newest.
- Copy files between repositories, with a review of what would change before anything is written.
- Panels you can resize, which remember their width; light, dark or the system's theme; and a view that refreshes by itself when the repository changes on disk.
0.1.8 does not update itself. To move on from it, uninstall it first (Settings → Apps → Installed apps), then install the latest version — see 0.1.10 for why. Your open repositories and settings are kept.