The git CLI wrapper that treats you like a human, not a compiler.
Warning
gdx is a drop-in wrapper for the Git CLI. It doesn't replace Git; it just makes it less... unpleasant.
It wraps standard git commands with intelligent shorthands and adds powerful new capabilities that Git is missing like safety rails for destructive actions (undoable reset --hard), introduces new workflows for parallel editing and local analytics.
Why gdx?
- ๐ Convenience: Type less, do more.
git status? how aboutgdx s?,git reset HEAD~3? why notgdx res ~3? - ๐ก๏ธ Safety:
gdx clearwipes your directory but saves a backup patch. No more "oops" moments. - ๐ง Logic: Handles the things Git makes hard, like dropping a range of stashes (
drop 2..6). - ๐ Local-First Stats: Beautiful TrueColor graphs and stats generated from your local history.
- ๐ค AI Integration: Generate commit messages and roast your history with local or cloud LLMs.
With NPM
Uses the bundled JS version. Works everywhere Node.js 18+ is installed. This is the easiest way to get started and ensures maximum compatibility.
npm i -g gdxDownloads a precompiled native binary. No runtime dependency on Node/Bun for execution.
GDX_USE_PREBUILT=1 npm i -g gdx # bash / zsh
# or
$env:GDX_USE_PREBUILT='1'; npm i -g gdx # powershell / fishCompiles a native binary on your machine during install. Requires Bun to be installed.
GDX_BUILD_NATIVE=1 npm i -g gdx # bash / zsh
# or
$env:GDX_BUILD_NATIVE='1'; npm i -g gdx # powershell / fish[!NOTE] If your environment sets
ignore-scripts=true, the installation will succeed but default to the Node.js fallback. Rungdx doctorto verify your installation status.
Download Manually
Prebuilt stand-alone binaries are available on the Releases page.
Build it yourself
Requires Bun to be installed.
git clone https://github.com/Type-Delta/gdx.git --depth 1
cd gdx
bun install
bun run buildYour compiled binary will be in ./dist/ folder.
To enable features like gdx parallel switch (auto-cd into worktrees), you need to add shell integration.
To do this add the following line to the End of your shell profile (~/.bashrc, ~/.zshrc, etc.):
eval "$(gdx --init --shell bash)" # for bash
eval "$(gdx --init --shell zsh)" # for zshgdx --init --shell fish | sourceTo find your profile path, run $PROFILE in PowerShell.
Invoke-Expression (& { (gdx --init --shell pwsh | Out-String) })Tip
you can add --cmd to the gdx --init command to create custom aliases.
For example, gdx --init --shell zsh --cmd g will create g as an alias for gdx.
gdx isn't just a list of static aliases. It understands partial commands and expands them smartly.
gdx s # -> git status
gdx lg # -> git log --oneline --graph --all --decorate
gdx lg export # -> Exports git log to a markdown file
gdx pl -au # -> git pull --allow-unrelated-histories
gdx ps -fl # -> git push --force-with-lease
gdx reset ~2 # -> git reset HEAD~2Note
This wrapper forwards unrecognized commands directly to git, so you can use it as a full git replacement.
Catch issues before they reach the remote. gdx lint checks for:
- Spelling errors in commit messages
- Conflict markers left in code
- Sensitive content (keys, tokens)
- Large files
You can configure gdx to run this automatically before every push.
We've all accidentally reset files we meant to keep. gdx clear is the solution.
gdx clear: Creates a timestamped patch backup in a temp folder, then effectively runsreset --hard&clean -fd.gdx clear pardon: "Wait, I didn't mean to do that." Applies the backup patch and restores your changes.
Need to work on the same branch in multiple isolated environments without checking out new branches?
# Manage forked worktrees for the current branch
gdx parallel fork # Create a new temp-backed fork
gdx parallel list # See where your forks are
gdx parallel switch # Switch between forks (requires shell integration)
gdx parallel open # Open any fork in your default editor
gdx parallel join # Merge changes from a fork back to mainGit stash is great until you need to clean it up.
gdx sta l # git stash list
gdx sta d 2..6 # Drops stashes 2 through 6.
# (Drops high->low to prevent index shifting)
gdx sta d pardon # Restores the last dropped stash.Struggling to come up with a commit message? Let gdx do it for you.
gdx commit auto # Generates a commit message based on staged changes, then commits them.
# or
# Generates a commit message based on staged changes, but does not commit them.
# `--copy` also copies the message to clipboard.
gdx commit auto --no-commit --copy
# You can also configure which LLM to use with `gdx-config`Tools to help you feel productive without leaving the terminal.
gdx stats: Shows fun contribution statistics and metrics for your current repo.gdx graph: Renders a GitHub-style contribution heatmap in your terminal using TrueColor.gdx nocap: Uses AI to roast your latest commit message.
| Command | Expansion / Function |
|---|---|
s, stat |
git status |
lg, lo |
git log --oneline --graph --all --decorate |
sw, swit |
git switch |
br, bra |
git branch |
cmi, com |
git commit (Try gdx cmi auto for AI messages!) |
res |
git reset (supports res ~3, res -h expansion) |
sta, st |
git stash |
lint |
Run pre-push checks (spelling, secrets, etc.) |
gdx-config |
Manage gdx configuration |
Run gdx ghelp to see the full list of expansions.
This project uses Bun for development because it's fast and the developer experience is great.
-
Clone the repo
-
Prepare the development environment:
bun run prepare-dev
-
Run in dev mode:
bun start -- # your gdx commands here # for example: bun start -- s # runs `gdx s` (git status)
Since this is currently a solo "scratch your own itch" project, the roadmap is fluid, but here is what is on the horizon:
- Configurability: Allow users to define their own shorthands in a
.gdxrc.tomlfile. - Shell Integration: Auto-completion scripts for Zsh/Bash/Fish/Powershell.
- Commit with specified editor: like,
gdx commit --vimto open Vim for commit messages. - Quick commit:
add,commit, andpushin one command likegdx qc -pa(git add . && gdx commit auto && git push) - Quick linting before push:
gdx lintto run following checks before pushing:- commit message spelling
- env or sensitive content scanning
- conflict markers
- abnormal file sizes
with an option to automatically run lint before every push (bypass with
gdx push --no-lint)
- Undoable stash drop
- Parallel worktree switching
gdx parallel switchJump between forks (auto-cd) (requires shell integration withgdx --init --shell) - Seamless Integration with fzf and cloc
automatically detect and use fzf and/or cloc if installed for:
- Interactive fuzzy search for branches, commits, stash, log and files instead of
less - Code line statistics in
gdx statsusingcloc
- Interactive fuzzy search for branches, commits, stash, log and files instead of
- gdx clear Untracked files support:
gdx clearnow automatically backs up untracked files in the patch. - gdx migrate: move dirty changes to another branch/worktree without committing.
MIT ยฉ Type-Delta