| Crates.io | lgit |
| lib.rs | lgit |
| version | 0.9.1 |
| created_at | 2023-05-24 19:54:40.836663+00 |
| updated_at | 2025-09-11 13:34:43.199091+00 |
| description | CLI tool for managing git repositories |
| homepage | |
| repository | https://github.com/Luladjiev/lgit-rs |
| max_upload_size | |
| id | 873694 |
| size | 59,318 |
lgit-rs is a powerful, opinionated command-line interface (CLI) tool, designed to simplify the management of git
repositories. It provides a set of commands that streamline common git operations, making your workflow more efficient.
Autosquash (as): Automatically squash all fixup commits in the current branch, cleaning up your commit history with interactive rebase. Perfect for consolidating work-in-progress commits.
Branch (b): Quickly create a new branch from a freshly pulled BASE branch (defaults to main/master). Ensures you're always branching from the latest code.
Checkout (co): Checkout a branch by name with fuzzy matching, or interactively select from a list of all local/remote branches. Supports --remote and --all flags for filtering.
CherryPick (cp): Interactively select and cherry-pick commits from another branch using a fuzzy finder. Makes it easy to apply specific commits across branches.
DeleteBranches: Safely delete all local branches whose remote tracking branches no longer exist. Helps keep your local repository clean.
Fixup (f): Commit changes as a fixup commit that can later be automatically squashed with autosquash. Streamlines the process of fixing up previous commits.
Rebase (r): Rebase the current branch on top of a freshly pulled BASE branch with a single command. Keeps your feature branches up to date.
Git Command Fallback: For any git command not directly supported by lgit, the tool will automatically pass the command through to git, making lgit a drop-in replacement.
You can check your versions:
git --version
rustc --version # if building from source
Download precompiled binaries for Windows, macOS and Linux from the releases page.
Installing through Cargo is the easiest way if you have Rust installed:
cargo install lgit
To update to the latest version:
cargo install lgit
Clone and build the project locally:
git clone https://github.com/Luladjiev/lgit-rs.git
cd lgit-rs
cargo install --path .
Cargo not found: Install Rust and Cargo from rustup.rs
Permission denied: On macOS/Linux, you might need to add ~/.cargo/bin to your PATH:
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Old version: Make sure you're getting the latest version:
cargo install lgit --force
Here are some common workflows to get you started with lgit:
# Create a new feature branch from latest main
lgit branch feature/awesome-feature
# Make your changes, then commit as fixup for easy cleanup later
lgit fixup "Add awesome feature"
# Make more changes, create another fixup
lgit fixup "Fix typo in awesome feature"
# Squash all fixup commits when you're ready
lgit autosquash
# Keep your branch up to date with main
lgit rebase
# Checkout a branch interactively
lgit checkout
# Clean up old branches whose remotes are gone
lgit delete-branches
# Cherry-pick commits from another branch interactively
lgit cherry-pick other-branch
# Any git command works through lgit
lgit status
lgit log --oneline
lgit push origin main
# Explicitly pass commands to git with --
lgit -- branch -d old-feature
To get a comprehensive list of all available commands and options, you can use the --help flag:
lgit --help
Each command has a dedicated help page that can be accessed by running lgit <command> --help. For example:
lgit branch --help
If you run a git command that is not directly supported by lgit, the tool will automatically pass the command through to git. This means you can use lgit as a drop-in replacement for git:
# These commands will be passed through to git
lgit status
lgit log --oneline
lgit diff HEAD~1
You can also explicitly execute git commands by using -- followed by the git command:
# Explicitly pass commands to git using --
lgit -- status
lgit -- log --graph --all
lgit -- reset --hard HEAD~1
# Squash all fixup commits in current branch
lgit autosquash
# Squash last 3 commits
lgit as --number 3
# Squash commits since branching from main
lgit as --base main
# Create branch from default base (main/master)
lgit branch my-feature
# Create branch from specific base
lgit b my-feature --base develop
# Interactive checkout
lgit checkout
# Checkout with fuzzy matching
lgit co my-feat # matches "my-feature"
# List only remote branches
lgit co --remote
# List all branches (local + remote)
lgit co --all
# Create fixup commit with staged changes
lgit fixup "Fix the bug"
# Shorthand
lgit f "Update docs"
# Interactive cherry-pick from another branch
lgit cherry-pick feature/other-branch
# Shorthand
lgit cp main
# Rebase current branch on freshly pulled main
lgit rebase
# Rebase on specific base branch
lgit r --base develop
# Delete branches whose remotes are gone
lgit delete-branches
lgit uses your existing git configuration and doesn't require additional setup. However, you can configure some behaviors:
lgit automatically detects your main branch (main, master).
lgit respects all your existing git configurations including:
lgit streamlines common git workflows by providing opinionated, high-level commands that combine multiple git operations. Here's how lgit compares to standard git commands:
| Task | Git Commands | lgit Command |
|---|---|---|
| Create branch from latest main | git checkout main && git pull && git checkout -b feature |
lgit branch feature |
| Fixup and squash commits | git add -A && git commit --fixup=HEAD~1 && git rebase -i --autosquash HEAD~3 |
lgit fixup "fix" && lgit autosquash |
| Interactive branch checkout | git branch -a โ copy/paste branch name โ git checkout branch |
lgit checkout |
| Clean up merged branches | git branch -d branch1 && git branch -d branch2... |
lgit delete-branches |
| Rebase on latest main | git checkout main && git pull && git checkout - && git rebase main |
lgit rebase |
lgit-rs is developed using the Rust programming language and
the Cargo package manager.
You can clone the repository and run the project locally using the following commands:
git clone https://github.com/luladjiev/lgit-rs.git
cd lgit-rs
cargo run
We welcome contributions from the community! Here's how you can help improve lgit:
git clone https://github.com/YOUR-USERNAME/lgit-rs.git
cd lgit-rs
lgit branch feature/your-feature-name
# Install dependencies and build
cargo build
# Run tests
cargo test
# Run lgit locally during development
cargo run -- --help
# Format code (use rustfmt)
cargo fmt
# Run linting
cargo clippy
# Before submitting, run all checks
cargo test && cargo fmt && cargo clippy
lgit fixup "feat: add new awesome feature"
lgit autosquash
src/
โโโ commands/ # Individual command implementations
โ โโโ autosquash.rs
โ โโโ branch.rs
โ โโโ ...
โโโ cli.rs # Command-line interface definitions
โโโ commands.rs # Command dispatch logic
โโโ main.rs # Application entry point
โโโ utils.rs # Shared utilities
Found a bug? Have a feature request? Open an issue with:
Q: Does lgit work with existing git repositories? A: Yes! lgit works with any existing git repository. It uses your current git configuration and doesn't modify your repository structure.
Q: Can I use lgit alongside regular git commands? A: Absolutely. lgit is designed as a complement to git, not a replacement. You can mix lgit and git commands freely.
Q: What happens if I run a git command that lgit doesn't support?
A: lgit will automatically pass the command through to git, so lgit status works the same as git status.
Q: Does lgit support git hooks? A: Yes, lgit respects all existing git hooks since it uses git under the hood.
"Command not found: lgit"
~/.cargo/bin is in your PATHcargo install lgit --force to reinstall"Git command failed"
git statusgit --version"No base branch found"
lgit rebase --base your-branchInteractive menus not working
cargo install lgit --force"Branch already exists"
lgit checkout existing-branch to switch to existing brancheslgit branch new-branch only for creating new brancheslgit-rs is licensed under the MIT License, a permissive license that lets
you do anything with the code with proper attribution and without warranty.