From 450246fe081ed829aae04b08e5a0390f156dafe2 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 19 May 2026 00:01:50 +0200 Subject: [PATCH 1/3] Add Claude Code plugin/skill packaging Make the repository installable as a Claude Code plugin so Claude can invoke the magic-merge-commit tool when it detects a squash-merge conflict. Adds the marketplace and plugin manifests, the wrapper skill, and README install instructions. Co-Authored-By: Claude Opus 4.7 --- .claude-plugin/marketplace.json | 16 +++++++++ .claude-plugin/plugin.json | 11 +++++++ README.md | 14 ++++++++ skills/magic-merge-commit/SKILL.md | 53 ++++++++++++++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 .claude-plugin/marketplace.json create mode 100644 .claude-plugin/plugin.json create mode 100644 skills/magic-merge-commit/SKILL.md diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json new file mode 100644 index 0000000..92d8f2a --- /dev/null +++ b/.claude-plugin/marketplace.json @@ -0,0 +1,16 @@ +{ + "name": "magic-merge-commit", + "owner": { + "name": "koppor" + }, + "metadata": { + "description": "Marketplace hosting the magic-merge-commit Claude Code plugin." + }, + "plugins": [ + { + "name": "magic-merge-commit", + "source": "./", + "description": "Fix Git merge conflicts caused by a squash-merged base branch." + } + ] +} diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..c599c24 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,11 @@ +{ + "name": "magic-merge-commit", + "description": "Fix a Git merge conflict caused by a squash-merged base branch. Wraps the jbang-based magic-merge-commit tool.", + "version": "1.0.0", + "author": { + "name": "Oliver Kopp" + }, + "homepage": "https://github.com/koppor/magic-merge-commit", + "repository": "https://github.com/koppor/magic-merge-commit", + "keywords": ["git", "merge", "squash", "conflict", "pull-request"] +} diff --git a/README.md b/README.md index 6703aa8..20a4de2 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,20 @@ If you don't want to install jbang, place [`gg.cmd`](https://github.com/eirikb/g - Linux/macOS: `sh ./gg.cmd jbang do@koppor/magic-merge-commit ` - Windows: `.\gg.cmd jbang do@koppor/magic-merge-commit ` +## Use as a Claude Code skill + +This repository is also a [Claude Code plugin](https://docs.claude.com/en/docs/claude-code/plugins). +Install it so Claude runs the tool for you when it detects a squash-merge conflict: + +```terminal +/plugin marketplace add koppor/magic-merge-commit +/plugin install magic-merge-commit@magic-merge-commit +``` + +The skill still requires `jbang` (or `gg.cmd`) and a `GITHUB_TOKEN` environment +variable on your machine — it tells Claude *when* and *how* to invoke the tool, +it does not bundle the tool itself. + ## Step-by-step description of the scenario ### 1. First pull request is created diff --git a/skills/magic-merge-commit/SKILL.md b/skills/magic-merge-commit/SKILL.md new file mode 100644 index 0000000..74ad106 --- /dev/null +++ b/skills/magic-merge-commit/SKILL.md @@ -0,0 +1,53 @@ +--- +name: magic-merge-commit +description: Fix a Git merge conflict caused by a squash-merged base branch. Use + when a PR can't merge `main` cleanly because its base branch was squash-merged, + and Git sees the old commits as conflicting with the squashed commit in `main`. + Creates a "magic" merge commit linking the branch to the squashed history. +--- + +# Magic Merge Commit + +Resolves conflicts where a pull request's base branch was squash-merged into +`main`. After the squash-merge, Git no longer connects the branch to its +history, so merging `main` produces spurious conflicts. This skill runs a tool +that creates a merge commit with two parents (`main` + branch tip), wiring the +histories back together so `main` merges cleanly. + +## When to use + +All of the following are true: + +- The user is on a branch that was based on another PR's branch. +- That other PR was **squash-merged** into `main`. +- Merging `main` into the current branch now conflicts. + +## Prerequisites (verify before running) + +1. `jbang` is on `PATH`. If not, a `gg.cmd` file in the repository root works + as a fallback (see https://github.com/eirikb/gg#ggcmd). +2. The `GITHUB_TOKEN` environment variable is set with read access to the + repository. The tool authenticates via `GitHubBuilder().fromEnvironment()`. +3. The current Git branch is the one based on the squashed PR — not `main`. + +If a prerequisite is missing, tell the user how to fix it and stop. + +## Run + +Ask the user for `` — the number of the PR that was squash-merged +into `main`. Then run: + +``` +jbang do@koppor/magic-merge-commit +``` + +Fallback when `jbang` is not installed (`gg.cmd` in repo root): + +- Linux/macOS: `sh ./gg.cmd jbang do@koppor/magic-merge-commit ` +- Windows: `.\gg.cmd jbang do@koppor/magic-merge-commit ` + +## After running + +The tool creates a merge commit with `main` and the branch tip as parents. +Confirm with `git log --graph --oneline -5` that the magic commit exists, then +the user can merge `main` without conflicts. From a3e3616d233a6318969e5005d167439800667236 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 19 May 2026 00:03:33 +0200 Subject: [PATCH 2/3] Ship gg.cmd in the repository root Bundle the gg.cmd launcher (gg v166) so users can run the tool without installing jbang first. Removes gg.cmd from .gitignore and updates the README to point at the shipped copy. Co-Authored-By: Claude Opus 4.7 --- .gitignore | 2 -- README.md | 2 +- gg.cmd | Bin 0 -> 29454 bytes 3 files changed, 1 insertion(+), 3 deletions(-) create mode 100644 gg.cmd diff --git a/.gitignore b/.gitignore index 19a59e5..9f11b75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1 @@ .idea/ - -gg.cmd diff --git a/README.md b/README.md index 20a4de2..eb61d4b 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ You need to be on the branch which is base on the pull request indicated by `` - Windows: `.\gg.cmd jbang do@koppor/magic-merge-commit ` diff --git a/gg.cmd b/gg.cmd new file mode 100644 index 0000000000000000000000000000000000000000..951a19670c359ca4fcf7629432be6a7154832eef GIT binary patch literal 29454 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 Date: Tue, 19 May 2026 00:04:08 +0200 Subject: [PATCH 3/3] Mark gg.cmd executable Set the executable bit so the launcher can be run directly as ./gg.cmd on Linux/macOS, not only via `sh ./gg.cmd`. Co-Authored-By: Claude Opus 4.7 --- gg.cmd | Bin 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 gg.cmd diff --git a/gg.cmd b/gg.cmd old mode 100644 new mode 100755