Releases: senseyman/mergelio
Release list
v1.4.1 - Find It, Fix It, Ship It
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
v1.4.0 - Worktrees
Git worktrees become first-class citizens: list them, create them, manage them, and open each one as its own tab.
Worktrees
- Every linked worktree is listed in the sidebar with its branch (or short HEAD when detached), lock state, and prunable status.
- Create a worktree on a new branch, an existing branch, or a detached head - and open it as its own tab.
- Move, lock, unlock, and remove worktrees. Removing a worktree with uncommitted changes asks before forcing, and pruning shows exactly which stale entries would be dropped.
- Branches already checked out in another worktree are badged in the branch list. Switching to one offers to jump to that worktree instead of failing with git's error.
Other changes
- Commit details now show the full date and time, with the author's timezone offset.
Under the hood
- Worktree state and filesystem watching are covered by dedicated test suites; the suite is now 1062 tests.
v1.3.0 - Project browsing and an in-app editor
A repository tab is no longer only a commit graph - it can also be a project browser with a real editor.
Project files
- Files mode - switch a repository tab from the commit graph to a project browser and back; the choice is remembered per tab.
- A lazy directory tree: a folder is read the first time it is opened, so a repository with a huge node_modules costs nothing until you look inside it.
- Git context on every row - modified and untracked badges, dimmed ignored entries, and a hide-ignored toggle.
- Editor tabs using the same editor as the diff sheet: syntax colouring, ⌘S / Ctrl+S saving, a line-number gutter, and ⌘F / Ctrl+F find and replace with a match count and a case toggle. Open files are restored on the next launch; unsaved text never is.
- Unsaved editors are asked about once - when leaving Files mode, closing the repository tab, or quitting.
- Right-click a row for new file, new folder, rename, delete, stage, unstage, discard, file history, and reveal in the system file manager.
- An open file follows what happens on disk: renamed, its tab moves with it; deleted, the tab says so and saving is refused.
Security and ### stability
- Hardened path validation - every path is checked against the opened repository before disk is touched.
- Fixed a race in the undo stack and cleaned up leaked resources.
- Fixed a repository reload loop and sped up slow graph reads.
v1.2.0 - Selective staging by line
- Stage and unstage individual lines, not just whole hunks - select lines in the diff and apply exactly those.
- Discard selected lines, including inside untracked files.
- Reworked diff selection handling so a selection survives scrolling and view-mode changes.
v1.1.0 - File editing and remote management
- Edit uncommitted files in place, plus a copy action for file contents and paths.
- Add, edit, and remove remotes from the UI.
- Added the project README.