patchgen
v1.1.0
Published
A CLI tool to generate .patch files from git repositories
Readme
patchgen
A guided CLI to generate Git patch files from staged changes, branch diffs, and tag diffs.
patchgen helps developers generate .patch files with a cleaner and more guided workflow than manually typing Git patch commands.
Quick start
npx patchgenOr install globally:
npm install -g patchgen
patchgenFeatures
- Generate patches from staged changes
- Generate patches from branch diffs
- Generate patches from tag diffs
- Include all files or select specific files to include
- Guided interactive CLI
- Predictable
.patchoutput flow
Why use patchgen?
You can always generate patches with raw Git commands. patchgen makes that workflow easier and more consistent by reducing command memorization and guiding you through patch creation step by step.
Patch files are also a practical way to share code changes with LLMs and AI assistants. Instead of pasting raw diffs or multiple files, a single .patch file gives the model a structured, complete picture of what changed — making it easier to get accurate reviews, suggestions, or explanations.
Supported flows
Staged changes
Generate a patch from files already staged in Git (git diff --cached).
Compare branches
Generate a patch from the diff between a base branch and a feature branch (git format-patch).
Compare tags
Generate a patch from the commits between two tags (git format-patch). This is useful when preparing release notes or reviewing what changed between releases.
File selection
In every flow, after choosing the patch type, you can decide which files to include:
- Include all files — uses all changed files
- Select files to include — shows a multi-select list to pick specific files
Note: When using "Select files to include" in Compare branches or Compare tags mode, the patch is generated with
git diffinstead ofgit format-patch, so commit messages will not be included in the output.
Example
Staged — include all files
◆ patchgen — Generate .patch files from your git repository
✔ Git repository detected.
◆ Select patch type:
● Staged changes — Generate a patch from staged files
○ Compare branches — ...
○ Compare tags — ...
◆ Which files to include?
● Include all files
○ Select files to include
◆ Output file name: › staged.patch
┌ Summary
│ Patch type: Staged changes
│ Output file: staged.patch
└
✔ Generate patch? Yes
✔ Collecting staged changes...
✔ Done.
✔ Writing file...
✔ Patch saved to staged.patch
◆ All done!Compare branches — select files
◆ patchgen — Generate .patch files from your git repository
✔ Git repository detected.
◆ Select patch type:
○ Staged changes — ...
● Compare branches — Generate a patch from commits in a feature branch not present in a base branch
○ Compare tags — ...
◆ Base branch: › main
◆ Feature branch: › feat/login
◆ Which files to include?
○ Include all files
● Select files to include
┌ Note
│ When selecting specific files in branch compare mode,
│ commit messages will not be included in the patch.
└
◆ Select files to include:
◼ src/auth/login.ts
◼ src/auth/utils.ts
◻ src/config.ts
◆ Output file name: › main-feat-login.patch
┌ Summary
│ Patch type: Compare branches
│ Base branch: main
│ Feature branch: feat/login
│ Files selected: 2 files
│ Note: Commit messages not included
│ Output file: main-feat-login.patch
└
✔ Generate patch? Yes
✔ Generating patch...
✔ Done.
✔ Writing file...
✔ Patch saved to main-feat-login.patch
◆ All done!Compare tags — include all files
◆ patchgen — Generate .patch files from your git repository
✔ Git repository detected.
◆ Select patch type:
○ Staged changes — ...
○ Compare branches — ...
● Compare tags — Generate a patch from commits between two tags, useful for release notes
◆ From tag: › v1.0.0
◆ To tag: › v1.1.0
◆ Which files to include?
● Include all files
○ Select files to include
◆ Output file name: › v1.0.0-v1.1.0.patch
┌ Summary
│ Patch type: Compare tags
│ From tag: v1.0.0
│ To tag: v1.1.0
│ Output file: v1.0.0-v1.1.0.patch
└
✔ Generate patch? Yes
✔ Generating patch...
✔ Done.
✔ Writing file...
✔ Patch saved to v1.0.0-v1.1.0.patch
◆ All done!Requirements
- Git
- Node.js 18+
Current limitations
- Interactive-first workflow — scripted/piped mode is not yet supported
- Output directory is always the current working directory
- No diff preview before saving
- No support for generating multiple patch files in a single run
Roadmap
- Non-interactive mode for use in CI pipelines
--output <dir>flag- Config file support (
.patchgenrc) - Colorized diff preview
- Shell completions for branch and tag names
Flow diagram
flowchart TD
A([Start]) --> B{Select patch type}
B -->|Staged changes| C[Detect staged files]
B -->|Compare branches| D[Enter base & feature branches]
B -->|Compare tags| T[Enter from & to tags]
D --> E[Detect changed files]
T --> E
C --> F{Which files to include?}
E --> F
F -->|Include all files| G[Enter output file name]
F -->|Select files to include| H[Choose files from list]
H --> G
G --> I[Show summary]
I --> J{Confirm?}
J -->|Yes| K[Run git command]
J -->|No| L([Cancel])
K --> M[Write .patch file]
M --> N([Done])Contributing
Issues and pull requests are welcome.
License
MIT
