{"id":51882272,"url":"https://github.com/gitstudiohq/merge-studio","last_synced_at":"2026-07-25T15:00:18.879Z","repository":{"id":364372957,"uuid":"1265585577","full_name":"GitStudioHQ/merge-studio","owner":"GitStudioHQ","description":"The merge editor for VS Code and Cursor — a real three-pane merge editor with color ribbons, a conflicts dashboard, undo history, and a side-by-side diff.","archived":false,"fork":false,"pushed_at":"2026-06-24T12:54:37.000Z","size":4168,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-25T08:34:12.878Z","etag":null,"topics":["conflict-resolution","cursor","diff","diff-tool","git","jetbrains","merge-conflicts","merge-editor","merge-tool","three-way-merge","vscode-extension"],"latest_commit_sha":null,"homepage":"https://gitstudiohq.github.io/merge-studio/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GitStudioHQ.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"antonarnaudov"}},"created_at":"2026-06-10T22:58:49.000Z","updated_at":"2026-07-14T10:39:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/GitStudioHQ/merge-studio","commit_stats":null,"previous_names":["antonarnaudov/merge-studio","gitstudiohq/merge-studio"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/GitStudioHQ/merge-studio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GitStudioHQ%2Fmerge-studio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GitStudioHQ%2Fmerge-studio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GitStudioHQ%2Fmerge-studio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GitStudioHQ%2Fmerge-studio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GitStudioHQ","download_url":"https://codeload.github.com/GitStudioHQ/merge-studio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GitStudioHQ%2Fmerge-studio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35883105,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-25T02:00:06.922Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["conflict-resolution","cursor","diff","diff-tool","git","jetbrains","merge-conflicts","merge-editor","merge-tool","three-way-merge","vscode-extension"],"created_at":"2026-07-25T15:00:18.060Z","updated_at":"2026-07-25T15:00:18.840Z","avatar_url":"https://github.com/GitStudioHQ.png","language":"TypeScript","funding_links":["https://github.com/sponsors/antonarnaudov"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eMerge Studio\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eThe merge editor for VS Code and Cursor.\u003c/b\u003e\u003cbr\u003e\n  \u003cb\u003eResolve conflicts with confidence.\u003c/b\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://marketplace.visualstudio.com/items?itemName=gitstudio.merge-studio\"\u003e\u003cimg src=\"https://vsmarketplacebadges.dev/version-short/gitstudio.merge-studio.svg?style=flat\u0026label=VS%20Marketplace\u0026logo=visualstudiocode\u0026logoColor=white\u0026color=6B5BE6\" alt=\"VS Marketplace version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://open-vsx.org/extension/gitstudio/merge-studio\"\u003e\u003cimg src=\"https://img.shields.io/open-vsx/v/gitstudio/merge-studio?label=Open%20VSX\u0026logo=eclipseide\u0026logoColor=white\u0026color=C160EF\" alt=\"Open VSX version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/GitStudioHQ/merge-studio/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/GitStudioHQ/merge-studio/ci.yml?branch=main\u0026label=build\u0026logo=githubactions\u0026logoColor=white\" alt=\"CI build status\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/GitStudioHQ/merge-studio/security\"\u003e\u003cimg src=\"https://img.shields.io/badge/vulnerabilities-0-44a248?logo=dependabot\u0026logoColor=white\" alt=\"Known vulnerabilities\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-44a248\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/sponsors/antonarnaudov\"\u003e\u003cimg src=\"https://img.shields.io/badge/Sponsor-EA4AAA?logo=githubsponsors\u0026logoColor=white\" alt=\"Sponsor on GitHub\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://checkout.revolut.com/pay/7a6070ab-99ba-4170-a125-c5911b1a5c1d\"\u003e\u003cimg src=\"https://img.shields.io/badge/Buy_me_a_coffee-FF813F?logo=buymeacoffee\u0026logoColor=white\" alt=\"Buy me a coffee\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"media/banner.png\" alt=\"Merge Studio — a beautiful three-pane merge editor, built into VS Code\"\u003e\n\u003c/p\u003e\n\nVS Code and Cursor never had a real merge editor. **So I built it.**\n\n**Merge Studio is that merge editor.** Three panes: **yours** on the left, the **result** you'll commit in the middle, and **theirs** on the right. Take a side with one click, or edit the result yourself — without ever leaving your editor.\n\nAnd you do it without fear. **No change is irreversible** — undo anything, or roll a file back to its original conflict. **No conflict is missed** — every one is tracked until it's settled. **Everything's in plain sight** — no markers to untangle, no guessing what you're about to commit.\n\nRuns in VS Code, Cursor, and any editor on the [Open VSX Registry](https://open-vsx.org/extension/gitstudio/merge-studio) — the real merge editor, native to the platform you already work in.\n\n---\n\n## Three-pane merge editor\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"media/screenshots/merge-editor.png\" alt=\"The three-pane merge editor resolving a large multi-line conflict — yours, result, theirs\"\u003e\u003c/p\u003e\n\nLeft is **yours**, the center is the **result** you commit, right is **theirs** — connected by color ribbons and accept arrows. Large, multi-line conflicts stay legible: each side's hunk is framed, the ribbons show exactly where it lands, and you pull a side into the result with a single click. Edit the result freely; alignment re-flows live as you type.\n\n- Per-change resolution — apply (≫ / ≪), append (Ctrl-click), or ignore (✕) each change independently\n- Apply every non-conflicting change at once (left / right / all), plus a magic-wand for identical edits\n- **Undo / redo with a named action history** — ⌘Z / ⇧⌘Z, toolbar buttons, and a history dropdown\n- Curved ribbons connect changes across panes, with crisp frames around true conflicts\n- Two-intensity highlighting that keeps syntax colors readable\n- Change navigation (F7 / ⇧F7), synchronized scrolling, whitespace modes, and a large-file fallback\n\n## Conflicts dashboard\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"media/screenshots/conflicts-dialog.png\" alt=\"The conflicts dashboard listing every conflicted file in a merge\"\u003e\u003c/p\u003e\n\nThe moment a merge, rebase, cherry-pick, or revert produces conflicts, the **Conflicts** page opens automatically — accelerated by direct `.git` operation-state watchers that poke git to re-scan as soon as a merge starts, instead of waiting on its slower poll. It's the cockpit for the whole merge.\n\n- Every conflicted file with **Accept Yours · Accept Theirs · Merge…** actions, and badges for the tricky cases (deleted by them, added by both, …)\n- Resolved files stay in the list — green, check-marked, and labeled with how they were settled\n- **Hold-to-undo** on any resolved file: a brief press-and-hold runs `git checkout -m` to restore the original conflict\n- **Cancel Merge** aborts the operation and restores the pre-merge state (merge, rebase, cherry-pick, revert)\n- Live progress bar, branch context (`yours ⟵ theirs`), and a ⚠ status-bar button while conflicts remain\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"media/screenshots/conflicts-resolved.png\" alt=\"The conflicts dashboard with every file resolved\"\u003e\u003c/p\u003e\n\n## Side-by-side diff\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"media/screenshots/diff-view.png\" alt=\"Line-aligned side-by-side diff with intra-line highlights\"\u003e\u003c/p\u003e\n\n- **Compare** any two files, or a single file against its git `HEAD` — Explorer right-click or the `Merge Studio: Compare` command\n- Line-for-line alignment with intra-line highlights on exactly what changed\n- Live re-diff as you edit the right pane\n- The same ribbons, colors, and navigation as the merge editor\n\n## Open in a JetBrains IDE\n\nPrefer to resolve in a JetBrains IDE? Set `jbMerge.conflictResolver: \"jetbrains\"` (or `jbMerge.diffTool: \"jetbrains\"`) and Merge Studio opens the merge or diff directly in your installed IDE — WebStorm, PyCharm, IntelliJ IDEA, PhpStorm, GoLand, CLion, Rider, RubyMine, or DataGrip, auto-detected from your `PATH` or `/Applications`.\n\n## Install\n\n**VS Code** — search **Merge Studio** in the Extensions view, or:\n\n```bash\ncode --install-extension gitstudio.merge-studio\n```\n\n**Cursor / VSCodium / Windsurf / Gitpod** — via the [Open VSX Registry](https://open-vsx.org/extension/gitstudio/merge-studio):\n\n```bash\ncursor --install-extension gitstudio.merge-studio\n```\n\n…or replace `cursor` with `codium` / `windsurf`, or install from the Open VSX UI.\n\n**Sideload a `.vsix`** — download the latest from [GitHub Releases](https://github.com/GitStudioHQ/merge-studio/releases/latest):\n\n```bash\ncode --install-extension merge-studio-\u003cversion\u003e.vsix\n```\n\nNew here? Run **Merge Studio: Open Getting Started** from the Command Palette for a guided tour with a ready-made sample conflict — no repo setup required.\n\n## Settings\n\n| Setting | Default | Description |\n| --- | --- | --- |\n| `jbMerge.conflictResolver` | `webview` | `webview` = embedded editor, `jetbrains` = launch the real installed IDE |\n| `jbMerge.diffTool` | `embedded` | Tool for the **Compare** command: `embedded`, or `jetbrains` (falls back to embedded if no IDE is found) |\n| `jbMerge.autoOpen` | `true` | Automatically open conflicted files with the selected resolver |\n| `jbMerge.preferredIde` | `auto` | Which JetBrains IDE to launch for hand-off (`auto` picks the first one found) |\n| `jbMerge.jetbrainsPath` | `\"\"` | Explicit path to a JetBrains IDE launcher (overrides auto-detection) |\n\n## Requirements\n\nVS Code **1.74+** (or Cursor), **git** on your `PATH`, and the built-in Git extension enabled. Merge Studio operates on a repository on disk, so it needs a trusted, non-virtual (local) workspace.\n\n## Development\n\n```bash\nnpm install              # install dependencies\nnpm run watch            # incremental build (extension + webview)\nnpm test                 # pure-logic unit tests\nnpm run check-types      # TypeScript type-check\nnpx @vscode/vsce package # build the .vsix\n```\n\nPress **F5** in VS Code to launch the Extension Development Host.\n\n| Layer | Responsibility |\n| --- | --- |\n| `src/extension.ts` | Activation, commands, auto-open routing, conflicts watcher |\n| `src/conflictsPanel.ts` | The Conflicts dashboard (webview) |\n| `src/mergeEditorProvider.ts` | `CustomTextEditorProvider` hosting the merge webview |\n| `src/git/` | git service, merge ops (accept side / abort), abort flow |\n| `src/jetbrains/` | Real-IDE detection and shell-out |\n| `src/engine/` | Diff / merge model (pure, unit-tested) |\n| `webview/` | Front-end: Monaco panes, ribbons, decorations, undo history |\n\n## Support\n\nMerge Studio is free, MIT-licensed, and built nights \u0026 weekends. If it makes your merges painless:\n\n- ❤️ **[Sponsor on GitHub](https://github.com/sponsors/antonarnaudov)** — recurring support\n- ☕ **[Buy me a coffee](https://checkout.revolut.com/pay/7a6070ab-99ba-4170-a125-c5911b1a5c1d)** — a one-off tip\n\n## License\n\n[MIT](LICENSE) — part of the **GitStudio** family.\n\n---\n\n\u003csub\u003eJetBrains, IntelliJ IDEA, WebStorm, PyCharm, PhpStorm, GoLand, CLion, Rider, RubyMine, and DataGrip are trademarks of JetBrains s.r.o. Merge Studio is an independent project and is not affiliated with, or endorsed by, JetBrains.\u003c/sub\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitstudiohq%2Fmerge-studio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgitstudiohq%2Fmerge-studio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitstudiohq%2Fmerge-studio/lists"}