Skip to content

Releases

v0.23.1

v0.23.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Nov 11:33

Fixed

  • New versions show up while the next one is being built: the app looked only at the newest version listed on GitHub, and while that one's installers were still being built (most of an hour) it found no update at all, even with newer versions already published, and hid the one it had found. It now offers the newest version that is published, and keeps showing an update found while later checks fail.
  • Connecting to a new SSH host asks whether to trust it again on Windows: since 0.23.0 ssh's question reached the app cut to its first line, so instead of the dialog with the host's fingerprint a plain text box came up. Its three lines now arrive whole, with Windows' own OpenSSH and with git for Windows' ssh.
  • A bisect where a commit marked good comes after the one marked bad says so: it showed the bad one as found (or failed to load the repository). The bar now says there is nothing between them to test, until a later commit is marked bad or the bisect stops.
  • The interactive rebase of a range with merges no longer fails at the end with rebase.updateRefs on, and no hook of the user (a global post-checkout) runs while it reads the list.
  • Compare with my changes leaves out a repository inside the working tree, which it listed as a file that could not be opened.

Code signing policy · Privacy policy

v0.23.0

v0.23.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 04 Nov 16:09

Added

  • Signed commits: a signed commit shows its signature under its author, checked here: Verified (by a key trusted here, or one of your own SSH keys), Signed (valid, by a key nothing here vouches for), Bad signature, expired, revoked, or not checked (the key or gpg missing); the tooltip says why. Settings → General (every repository, git's global config) and Settings → This repository pick whether commits are signed and with which key, one of your SSH keys in ~/.ssh or a secret GPG key. The commit box shows whether the commit will be signed (a click leads to the setting), and when signing fails nothing is committed: the app offers to commit without signing this once.

  • Search in the changes: the button at the end of the search box makes it look for the commits that add or remove the text typed (git's pickaxe, git log -S, ignoring case) instead of messages, authors and SHAs. Enter searches the branches the graph shows and goes to the next commit found (Shift+Enter, the one before), the others are dimmed and the box says how many there are; one older than the commits loaded is loaded to show it.

  • Reflog: get lost commits back: the repository menu → Reflog lists every move of HEAD, newest first (commits, amends, checkouts, resets, rebases, merges), and marks the commits that no branch, tag or remote branch has any more — left behind by a reset, an amend, a rebase or a deleted branch, even outside the app. Picking one shows it on the right, files and diffs included; Create branch keeps it. Its menu is a commit's (check out, cherry-pick, compare…), double-click shows it in the graph, and Esc closes it.

  • Bisect: find the commit that broke something: a commit's menu → Bisect: this one works, {branch} has the problem… starts git bisect between that commit and the one checked out. A bar under the toolbar shows the commit to test, checked out, and roughly how many steps are left, with Good, Bad and Skip (any commit's menu marks that commit instead); the graph marks the commits good, bad, skipped and the one to test. Once found, the bar names the first bad commit, selected in the graph, and Finish goes back to the branch it started from (Stop bisecting does too, at any time). Uncommitted changes in the way of the next checkout can be stashed and the bisect goes on. A bisect started in a terminal shows the same, with its own words for good and bad.

Fixed

  • A key's passphrase is asked for with Windows' own OpenSSH too (signing a commit with an SSH key, or ssh itself): it could not run the app's prompt.
  • The interactive rebase of a range with merges opens with uncommitted changes too: git's list of it is made in a throwaway clone with nothing checked out, so the changes no longer stop the dialog, and starting the rebase offers to set them aside as any rebase does.
  • Compare with my changes lists the new files git does not track yet, with their contents as added.

Code signing policy · Privacy policy

v0.22.1

v0.22.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 04 Nov 08:17

Fixed

  • A token the server no longer accepts is explained: when a fetch, pull or push fails because the remote refused the credentials of the repository's account ("Invalid username or token"), the app says the token was revoked or has expired — GitHub keeps ten sign-ins per account and app, and signing in again elsewhere revokes the oldest — and offers Sign in again, which opens Settings → Accounts and starts signing in with GitHub (or GitLab). A token that cannot be read on this computer says why (the system's own words), in that message and when the pull requests or the account are read.

Code signing policy · Privacy policy

v0.22.0

v0.22.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 03 Nov 10:45

Fixed

  • Push right after opening a repository asks where to publish a branch, as it does later: pressed before the app had read the repository, it pushed without asking (or said the branch was detached).

Added

  • Worktrees: a branch's menu → Open {branch} in a new worktree… checks it out in a folder of its own (next to the repository's by default) and opens it in a new tab, without switching branch here; both share their history and commits. A WORKTREES section in the side panel lists them (open in a tab, show the folder, copy its path, remove one, asking again when it has uncommitted changes) and forgets those whose folder was deleted by hand.
  • Several commits at once: Ctrl+click (⌘ on macOS) adds a commit of the graph to those picked, Shift+click picks the ones between; right-click one of them to cherry-pick them all (oldest first), revert them all (newest first) or copy their SHAs. Undo takes the whole lot back.
  • The interactive rebase and Checkout and merge with uncommitted changes in the way offer the same choice as a merge or a pull: stash them and bring them back once it is done (when the rebase stops at a commit to edit or for conflicts, they wait in the stash), or only stash them.
  • Squash merge: a branch's menu → Merge {branch} into {current} as one commit (squash) stages its changes as one, and gives the commit box a message listing its commits (when nothing is typed in it); clashes are left as conflicts to resolve first. Undo takes it back.
  • Compare two commits, a branch with the current one, or a commit with your changes: select a commit, right-click another one → Compare with …, selected before; or a branch's menu → Compare {current} with {branch}; or a commit's menu → Compare with my changes (working tree). The files that differ are listed with their diffs (images included), the two sides can be swapped, and Esc closes it.
  • Conflicts that are easy to find and read: the conflict editor colours the code and marks the words that differ between the current and the incoming side, as the diff does, with line numbers. It opens at the first conflict, folds the long stretches without conflicts, marks each conflict by the scrollbar (orange, green once resolved; a click goes there), and "Conflict 1 of 3" with its arrows (or Alt+↑ / Alt+↓) goes from one to the next. The two sides show side by side or one over the other, with the same switch as the diff.

Code signing policy · Privacy policy

v0.21.0

v0.21.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Oct 12:56

Added

  • Images in the diff: a changed image (PNG, JPEG, GIF, WebP, BMP, ICO, AVIF, and TGA, common for game textures) shows as the pictures before and after, side by side, with their size in pixels and bytes (two of the same size can also be compared with a divider swiped across or one over the other), instead of "Binary file" — for uncommitted changes, commits, file history and pull request reviews. A conflicted image shows its current and incoming sides in the conflict editor, to take one seeing them. Images in Git LFS show too, from the files downloaded here (nothing is fetched); one not downloaded says so.
  • Delete branches whose remote branch is gone: when branches were deleted on the server (often once their pull requests were merged), a button in the LOCAL header (and the menu of such a branch) lists them to delete at once. Only branches that had a remote branch are listed, never one that was not pushed, nor the one checked out; a branch with commits found on no other branch comes unchecked and says how many (a squash merge leaves them so). One Undo brings them all back.
  • Pull, merge, rebase, cherry-pick and revert with uncommitted changes in the way: instead of git's error, the app names the files (a rebase refuses for any change) and offers to stash them and bring them back once it is done, or only to stash them. When the operation stops for conflicts, the changes wait in the stash and the app says so. Undo goes back with the changes in one step.
  • Checkout with uncommitted changes in the way: when changes would be overwritten by switching branch (or checking out a commit or a pull request), the app names the files and offers to stash them and check out, take them along (stashed and applied on the other branch; where they clash, the files are left with conflicts and the stash is kept), or discard those files and check out, instead of git's error. Undo goes back to where you were, with the changes, in one step.
  • Interactive rebase with merges: a range of commits with merges among them no longer refuses the interactive rebase. The merges are kept as they are (git's own --rebase-merges plan), shown as fixed rows, with a dashed line where a merged branch starts; each commit can still be reworded, edited, squashed, fixed up or dropped. Commits are not moved across branches there (without merges, reordering is as before).
  • Several consoles in the terminal: the + in its header opens another console of the repository in a tab of its own, each with its shell and what it ran; the × on a tab closes it. URLs in the output (the one git push prints to open a pull request, for example) open in the browser with Ctrl+click (⌘+click on macOS). The terminal's font size is in Settings → External tools.
  • Undoing a hard reset brings back the changes it dropped, staged and not, along with the branch.
  • Undo a discard, and stashes: discarded changes (whole files, new files, a hunk, or everything) come back with Undo (Ctrl+Z), exactly as they were, and Redo discards them again. Saving, applying, popping and deleting a stash can be undone too. Only files over 50 MB are not kept for it (a game's assets can be gigabytes): then the app says that action cannot be undone. Undo refuses, as ever, when a file was edited since.

Fixed

  • Stash no longer says there is nothing to stash for a change made a moment before the app saw it: git is asked first.
  • The first commit of an empty repository can be undone: its files are left staged, and Redo commits them again.
  • Undoing a merge commit made with --no-ff (one that could have fast-forwarded) brings the merge back as such: committing it again makes a merge, not a plain commit of the other branch.
  • An open diff follows a file that became untracked (git rm --cached in a terminal) or tracked again, instead of showing no changes.
  • Accounts on a server of your own: Settings → Accounts says how to add GitHub Enterprise, a GitLab of your own or Gitea (Add account, with the server as host and a token created there).
  • Undoing a stash of all changes (or a discard of everything) no longer risks a change the app had not shown yet: the copy kept for undo was made from the files of the last refresh, so a change made just before (by another program, or right after an undo) could go with the stash and not come back. The copy is now made from what git sees at that moment.
  • The ✕ beside a branch says what it means on hover: its remote branch no longer exists (deleted on the server, often once its pull request was merged), and the branch keeps its commits.
  • A stash that clashes with the files when applied says that they are left with conflicts to resolve and that the stash is kept, instead of git's report.
  • Undo no longer takes in what a background fetch brought: tags fetched while a commit (or any action) ran were part of it, and undoing it deleted them. An action now waits for a fetch under way, and none starts until it is done.
  • Installing git-lfs: its progress shows whole lines; where the app cannot install it, the LFS section offers to copy the command (also after the question was turned down); accepting it while the repository is busy says so instead of taking over; closing the tab it installs from asks first (the install goes on).
  • A refused pull request change (closing one without the right to) no longer blames the token alone: the account's role on the project may be what is missing.
  • Signing in with GitHub waits through a dropped connection or a GitHub server error while you enter the code.
  • The changed-file headers fit the narrowest panel: with files checked, the buttons say the action and the count ("Stage (3)", "Discard (3)…", with the whole sentence as a tooltip), so the title stays in sight; in Spanish "Quitar selección" no longer reads as "deselect". The divider between the lists moves with the arrow keys too.

Code signing policy · Privacy policy

v0.20.0

v0.20.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Oct 13:01

Changed

  • Leviathan is now called Git Leviathan: typing "git" in the Windows search (or Spotlight, or a Linux menu) finds it, and the name tells it apart from other apps called Leviathan. Updating renames its shortcuts; settings, accounts and the leviathan command stay as they were.

Code signing policy · Privacy policy

v0.19.0

v0.19.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Oct 12:17

Added

  • A terminal inside the app: the Terminal button, or Ctrl and the key left of 1 (Ctrl+/ Ctrl+º), opens a console below the graph, in the repository's folder, as in VS Code. Everything a console does works there: git with all its commands (interactive ones too, such asgit add -p, git rebase -i` or the editor for a commit message), and any other program. Each repository keeps its own while you switch tabs or hide it, and what you do there shows in the graph at once. On Windows it runs the shell chosen as the terminal in Settings (Command Prompt, PowerShell 7 or Git Bash), Windows PowerShell otherwise; on macOS and Linux, your own shell. Ctrl+C copies what is selected (otherwise it stops what runs), Ctrl+V pastes (⌘C and ⌘V on macOS). The separate terminal window is still in the button's menu.
  • Where the changes are, beside the diff's scrollbar: as in VS Code, red marks for deleted lines and green ones for added lines show where each change is in a diff, which helps most with the whole file shown; a click on them goes there.

Fixed

  • Git LFS beside hooks of another tool (husky and the like): setting LFS up failed with "Hook already exists" and left every LFS hook out. It now sets up the hooks that are missing, downloads the large files, and explains what to add to the other tool's hooks, with git-lfs's instructions to copy (without them a push does not upload the large files).
  • Installing git-lfs: when GitHub limits how often it can be asked from your network, the app says so and when to try again; the question no longer opens on top of What's new; the failure message no longer ends a sentence with two periods; on Windows without LOCALAPPDATA it still installs into your own AppData\Local; and git-lfs installed by hand is noticed even when you come back to the window right away.
  • Closing a file history, folder history or blame stops git's work for it, which could keep the CPU busy on a big repository.
  • No false warning about the account's host when a repository's remote goes through an SSH alias (git@github-work:…).
  • The dividers move with the left button only (between the changed-file lists, the side panels' edges and the graph's columns), and a checked file still shows when the mouse is over it.
  • Resolving a conflicted file no longer closes the next one you opened: picking a side or saving a resolution closed whatever file was open once it finished, so a file opened right after (while the first one was still being resolved) closed by itself.
  • Settings and accounts are saved even when Windows holds the file for a moment (an antivirus or the search indexer reading it): the save is tried again instead of being lost.

Code signing policy · Privacy policy

v0.18.1

v0.18.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Oct 09:28

Changed

  • Settings per repository keep only what depends on the project: automatic fetch, pull mode, push after commit, commits loaded at a time, editor and diff tool. The terminal and avatars are general again (a value given to a repository in 0.18.0 is no longer used), and the repository's section sits apart at the bottom of Settings, with its name.

Code signing policy · Privacy policy

v0.18.0

v0.18.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Oct 08:37

Added

  • Settings per repository: a repository can have its own automatic fetch (for example every minute for one project and never for the rest), pull mode, push after each commit, commits loaded at a time, avatars, editor, terminal and diff tool, in Settings → This repository or from the toolbar's repository menu. Each one starts as "Same as general" and follows the general setting, also when it changes later; a mode picked in the Pull menu, or the push checkbox under the commit box, changes the repository's own value when it has one.

Code signing policy · Privacy policy

v0.17.0

v0.17.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Oct 14:59

Added

  • Keyboard shortcuts: in the lists of changed files (once clicked), the arrows go from file to file with its diff, Space stages or unstages the files checked or the one open and goes on to the next, and Delete discards them after asking. New shortcuts for fetch (Ctrl+Shift+F), a new branch (Ctrl+B), stashing (Ctrl+Shift+S), going to a tab by its number (Ctrl+1…9) and Settings (Ctrl+,); F1 lists them all in Settings → Keyboard shortcuts, and the toolbar's tooltips name them. On macOS, ⌘ instead of Ctrl.
  • Install git-lfs from the app: a repository that keeps its large files in Git LFS, opened or cloned on a computer without git-lfs, asks once whether to install it, and the LFS section offers it too. On Windows the official git-lfs is downloaded, checked against its published checksum and installed for the user only, without administrator rights; on macOS it is installed with Homebrew, and on Linux with the system's package manager, which asks for the password (where the app cannot install it, it says how). The repository is then set up and its real files replace the small pointers, without restarting the app.
  • Choose and arrange the graph's columns: right-click its header to hide or show the author, date and SHA columns, drag their headers to put them in another order, as with the tabs, and drag their edge to make them wider or narrower (a double click gives back the usual width); the choice is kept for every repository.
  • Commit message template: with git's commit.template set (for a repository or globally), the commit box starts from it — its first line as the summary, the rest as the description, without its comment lines — and again after each commit. As in git, the template left as it is cannot be committed, and Amend from it takes the last commit's message.

Fixed

  • Lines picked in a diff (to stage or unstage them on their own) were let go as soon as the repository was read again — coming back to the window, which a click from another app does, or any file changing on disk — although the diff had not changed. They now stay picked; they are still let go when the file itself changes, since its lines may have moved.
  • In a narrow window the side panels could squeeze the graph between them to nothing. They now narrow first (their widths come back when the window is wider), the graph keeps room to be seen and scrolls sideways when its columns do not fit, instead of cutting the last ones off, and the toolbar keeps its buttons' icons, with their names in the tooltips, instead of running the repository's name over them.
  • git-lfs installed where the app did not look (Homebrew's folders, for an app opened from the Finder on macOS; a per-user install on Windows) was reported as missing: it is now found there.
  • Installing git-lfs while the app was open was only noticed after the next checkout, so locks did not load until then: coming back to the window now notices it.
  • An account whose token cannot be read on this computer (a profile copied from another computer or user account) made the pull requests section disappear without a word. The section now says so and links to Settings → Accounts, where signing in again or a new token fixes it.
  • The history of a file renamed and staged, but not committed yet, was empty: it now follows the file back from the name it has in the last commit.
  • The history of a file whose name has quotes, backslashes or tabs (possible on Linux and macOS) showed an empty diff for each commit: git writes those names quoted, and they are now read back as they are.
  • Blame failed in every repository without the file blame.ignoreRevsFile names (a setting often made globally for the repositories that have one, such as .git-blame-ignore-revs). Files that are missing are now left out; the ones that are there still apply.
  • Pressing Undo (or Redo) again before the first one finished applied the same change twice; a press while one is being applied is now ignored.
  • The pull request list stopped at the 50 most recently updated: it now reads the next pages too, up to 500.
  • A clone with an account that succeeded but could not be set to use that account was reported as a failed clone, and not opened. It now opens, and says the account has to be picked again.
  • Two quick checkouts could leave the LFS patterns of the first one on screen until the next change.
  • Checking out a pull request failed with git's "cannot lock ref" when a local branch was in the way of its name: one named pr (for pr/7), or feature/old for a pull request from feature. It is now checked out as pr-7, or as pr/N like a branch name taken by other work.
  • Adding an account that is already there (by token, or signing in again) renewed its token but dropped the name and email typed in the form, and said the account was added: it now takes them, as editing the account would, and says the account was updated.
  • Pushing a branch that follows another one on purpose (git branch -u origin/develop) made it track the pushed branch instead; once the branch is published, that upstream is kept and the push goes where the branch already is, even when it follows another remote's branch. A first publish still tracks the new branch, as git push -u does, and a branch started from another remote's branch (upstream/main) asks which remote to publish it to when there are several. Create pull request accepts a branch that follows another one, if the branch of its name on the remote has its commits.
  • An open file history, folder history or blame is read again after a commit, checkout or pull (in the app or outside it), keeping the commit picked; it used to show what it found when opened.
  • A conflicted file deleted on both sides showed a raw "ENOENT" error in the conflict editor; it now says what happened and what the buttons do.
  • Shift+click on a file's checkbox gives the whole range the state that checkbox takes: a range can now be unchecked that way too, not only checked.
  • Ignore on a file whose name has [, *, ? or a backslash (pages/[id].tsx) ignored other files its name matched as a pattern, not that one: the name is now written literally in .gitignore.
  • A merge, cherry-pick, revert or rebase (by drag and drop or from a menu) that stops for something other than conflicts says what git found, without its hints about commands the app does not offer — as the interactive rebase already did.
  • A conflicted file marked resolved from the list (its button or menu) left the conflict editor showing it; the staged result is shown instead. Going from the conflict editor to a plain diff in the same pane could also leave the window blank.

Code signing policy · Privacy policy