What's Changed
-
Search commit content. The graph filter now searches inside diffs, not just messages and metadata: find commits that added or removed a piece of text, with an optional regular-expression mode. Results stream in while the search runs, and the filter row reports progress and an empty state.
-
Edit and copy commit messages. "Edit message…" and copy actions were added to the graph context menu and the commit details panel. HEAD is amended in place with --only, so staged changes are not swept into the amend; an older commit is reworded through an interactive rebase, and a commit that is not an ancestor of HEAD is refused. Rewriting a commit that already exists on a remote warns first, naming the branches that will need a force push.
-
Two long-standing bugs in the reword path were fixed along the way: a multi-line message split the rebase todo across lines that git read as separate instructions, and a plan spanning a merge commit left the repository mid-rebase with a detached HEAD. Rewording now preserves an existing signature instead of dropping it.
-
Rebase editor, reworked. The interactive-rebase modal now opens on a single whole-branch choice — move the commits as they are, or fold them into one — and only unfolds the per-commit table (action, drag-to-reorder, inline reword) when you ask to customize. Every action carries a plain-language description, so nobody has to already know what fixup does. Plans git would reject, such as a squash with nothing above it to squash into, are caught and explained before the rebase starts rather than failing partway through.
-
Rebase can now sign every replayed commit, and commit signatures are preserved across rebase and reword.
-
Delete remote branches. Delete a branch on the remote from its remote-tracking row, or remove a tracking branch locally and on the remote in one confirmed step.
-
Fetch no longer blocks everything else. Fetching runs in its own lane, so a fetch — including an auto-fetch tick — never blocks a commit, a branch create or a push.
-
Cancel a stuck network operation. The running operation is named in the status bar with a cancel button, so a fetch or push against a remote that stopped answering can be abandoned instead of waited out. Network commands also carry SSH connect and keepalive timeouts, so a dead host fails in seconds rather than minutes; any GIT_SSH_COMMAND or core.sshCommand you already set is kept.
-
Continue a cherry-pick or revert after conflicts. A conflicting cherry-pick or revert used to abort itself, leaving a terminal as the only way to keep the work. Both now pause into the Merge Tool the way a rebase does, and finishing there continues the sequence — including the --skip path for when the staged resolution leaves nothing to commit. A pick left paused by an earlier run is detected on open (CHERRY_PICK_HEAD / REVERT_HEAD) and stays continuable. Starting a new pick while one is paused is refused: git reports "already in progress" with the previous operation's conflicts still in the tree, which would relabel the open session with the new commit and misdirect its undo.
Full Changelog: v1.4.0...v1.4.1
Full Changelog: v1.4.1...v1.4.1