lgit-rs
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.
Table of Contents
- Features
- Requirements
- Installation
- Quick Start
- Usage
- Configuration
- Why lgit?
- Development
- Contributing
- FAQ & Troubleshooting
- License
Features
-
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--remoteand--allflags 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.
Requirements
- Git: Version 2.0 or higher
- Rust: Version 1.70 or higher (if building from source)
You can check your versions:
Installation
Precompiled Binaries (Recommended)
Download precompiled binaries for Windows, macOS and Linux from the releases page.
Using Cargo
Installing through Cargo is the easiest way if you have Rust installed:
To update to the latest version:
Building from Source
Clone and build the project locally:
Troubleshooting Installation
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:
Old version: Make sure you're getting the latest version:
Quick Start
Here are some common workflows to get you started with lgit:
Creating and Working on a Feature Branch
# Create a new feature branch from latest main
# Make your changes, then commit as fixup for easy cleanup later
# Make more changes, create another fixup
# Squash all fixup commits when you're ready
# Keep your branch up to date with main
Branch Management
# Checkout a branch interactively
# Clean up old branches whose remotes are gone
# Cherry-pick commits from another branch interactively
Using Git Commands
# Any git command works through lgit
# Explicitly pass commands to git with --
Usage
To get a comprehensive list of all available commands and options, you can use the --help flag:
Each command has a dedicated help page that can be accessed by running lgit <command> --help. For example:
Git Command Fallback
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
You can also explicitly execute git commands by using -- followed by the git command:
# Explicitly pass commands to git using --
Command Examples
Autosquash
# Squash all fixup commits in current branch
# Squash last 3 commits
# Squash commits since branching from main
Branch Operations
# Create branch from default base (main/master)
# Create branch from specific base
# Interactive checkout
# Checkout with fuzzy matching
# List only remote branches
# List all branches (local + remote)
Fixup Commits
# Create fixup commit with staged changes
# Shorthand
Cherry-pick
# Interactive cherry-pick from another branch
# Shorthand
Rebase
# Rebase current branch on freshly pulled main
# Rebase on specific base branch
Cleanup
# Delete branches whose remotes are gone
Configuration
lgit uses your existing git configuration and doesn't require additional setup. However, you can configure some behaviors:
Default Base Branch
lgit automatically detects your main branch (main, master).
Git Integration
lgit respects all your existing git configurations including:
- User name and email
- Remote configurations
- Git aliases
- Git hooks
Why lgit?
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 && 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 |
Key Benefits
- Fewer Commands: Complex workflows become single commands
- Interactive Menus: Fuzzy-finding for branches, commits, and more
- Smart Defaults: Automatically detects main branch, pulls latest changes
- Safety First: Confirmation prompts for destructive operations
- Git Compatibility: Drop-in replacement - all git commands still work
- Workflow Focused: Designed around real development workflows, not just git primitives
Development
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:
Contributing
We welcome contributions from the community! Here's how you can help improve lgit:
Getting Started
- Fork the repository on GitHub
- Clone your fork locally:
- Create a feature branch:
Development Workflow
# Install dependencies and build
# Run tests
# Run lgit locally during development
# Format code (use rustfmt)
# Run linting
# Before submitting, run all checks
&& &&
Submitting Changes
- Test your changes thoroughly
- Update documentation if needed
- Commit your changes using conventional commits:
- Push to your fork and create a Pull Request
What to Contribute
- ๐ Bug fixes - Help us squash bugs!
- โจ New features - Add new git workflow commands
- ๐ Documentation - Improve README, add examples
- ๐งช Tests - Increase test coverage
- ๐จ Code quality - Refactoring, performance improvements
Project Structure
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
Reporting Issues
Found a bug? Have a feature request? Open an issue with:
- Clear description of the problem or feature
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Your system info (OS, git version, lgit version)
FAQ & Troubleshooting
Common Questions
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.
Troubleshooting
"Command not found: lgit"
- Make sure
~/.cargo/binis in your PATH - Try running
cargo install lgit --forceto reinstall
"Git command failed"
- Ensure you're in a git repository:
git status - Check that git is working:
git --version - Verify you have the necessary permissions
"No base branch found"
- lgit looks for main or master branches
- Or specify manually:
lgit rebase --base your-branch
Interactive menus not working
- Ensure you're using a compatible terminal
- Try updating to the latest version:
cargo install lgit --force - Check that your terminal supports interactive input
"Branch already exists"
- Use
lgit checkout existing-branchto switch to existing branches - Use
lgit branch new-branchonly for creating new branches
Compatibility
- Git Version: Requires git 2.0+
- Operating Systems: Windows, macOS, Linux
- Terminals: Works with all major terminal emulators
- Git Workflows: Compatible with GitFlow, GitHub Flow, and custom workflows
License
lgit-rs is licensed under the MIT License, a permissive license that lets
you do anything with the code with proper attribution and without warranty.