Multi-Git is a desktop application for managing Git repositories across Windows, macOS and Linux without sending repository data to a remote service. It keeps separate SSH keys and commit identities for different projects, supports several repositories in one workspace, and allows branches to be checked out simultaneously through worktrees. The application presents staging, diff review, rebasing, conflict resolution, stashing, patches, bisect, submodules, Git LFS and remote management as visual tools while showing the exact Git commands it runs.
A recovery system records the position of movable refs before operations such as reset, rebase, branch deletion and stash drop, writing that information inside the repository's own Git directory so it survives a restart. Discarded file contents are snapshotted to a temporary location for a limited time. The application also exposes an operations log with arguments, working directory, exit code and duration for every command, and can open a terminal in the repository with the correct SSH identity.
Multi-Git requires no account and holds no GitHub token, relying on the GitHub CLI when pull requests or remote repository creation are requested. The project is distributed under the MIT license in installer, portable, Debian, RPM and AppImage formats. Configuration, SSH profiles and repository groups are stored in files in the user's home directory, while key files remain at the paths chosen by the user, and the local API binds to the loopback interface only.
| Switch active repository from header with remembered recent projects | Groups fetch all members with concurrency cap and cancellation |
| Open repository in separate window with own index lock | SSH profiles bind key, commit identity, and passphrase per repo |
| Auto-select rules match origin URL to SSH profile in order | Block push when authenticating account mismatches greeting account |
| Stage or discard exact selected lines within a file | Hunk header buttons act on whole diff sections contextually |
| Refuse actions when file changed on disk after diff opened | Selective stashing stores chosen hunks keeping staged files intact |
| Inspect, apply with index restored, or checkout stash to branch | Search stash messages and contained files via filter box |
| Side-by-side and unified modes with intra-line word highlighting | Indentation treated as distinct change, whitespace display-only |
| Images compared on checkerboard, binary files report sizes | Interactive rebase planner supports pick, reword, squash, fixup, drop |
| Autosquash preview shows where fixup commits land | Split commit undoes into working tree for staged recommit |
| Conflict workflow offers Keep Ours, Theirs, manual editing | External merge tool re-reads Git state after exiting |
| Safety Net keeps ten in-memory checkpoints per repository | Recovery points written inside .git surviving application restart |
| Discarded file snapshots stored in temp with expiry | Worktrees share remotes and objects with own index |
| Create GitHub pull requests through CLI preflight checks | Suggest title and description preserving manually edited text |
| Sign commits via system config, SSH key, or GPG key | Signature status reports Verified, Unverified, Bad, or absent |
| History panel draws colored branch and merge lanes | Cherry-pick, revert, tag, or reset commits from drawer |
| Branch maintenance filters merged, stale, orphaned branches | Bulk delete reports each branch outcome individually |
| Commit search filters by message, author, paths, date | Compare refs counts divergence from merge base both directions |
| Terminal panel records real argument vectors with exit codes | Open Git Bash carrying repository SSH identity |
| SSH agent loads keys after vault or one-time prompt | Vault encrypts passphrases with AES-256-GCM and scrypt |
| Repository hub manages remotes, submodules, LFS, patches, bisect | Coding agent launchers pass worktree, arguments, allowlisted environment |