English | ็ฎไฝไธญๆ
๐ A modern interactive Git CLI that streamlines your daily Git workflow. Make commits, manage branches, handle tags, and more - all through an intuitive terminal interface. Supports Linux/macOS/Windows
This project uses its own features to commit code - dogfooding at its finest!
easyGit is designed for developers who love Git but want to work faster.
Instead of typing multiple Git commands or remembering complex flags, easyGit provides:
- โก One-Command Workflows - Push all changes or select specific files with a single command; no-argument
easyGitopens an interactive action menu - ๐ Parallel Multi-Remote Push -
pa/ps/tc/td/bdpush to multiple remotes concurrently; one failing remote never blocks the others, and the summary lists every failed step - ๐ฏ Interactive Selection - Choose branches, commits, tags, and files through visual menus; press
/in any list to filter instantly - ๐ง Remembers Your Choices - Commit types, reset modes, merge strategies, cherry-pick options, and recent commit messages (โ/โ in the message input) are remembered across sessions
- ๐ง Smart Configuration - One-stop
configcenter for language, push preferences (incl. pull-before-push), commit types, tag version cap, theme, and conflict editor - ๐ Multilingual - Full English and Chinese support with auto-detection
- ๐จ Beautiful Interface - Clear visual feedback with modern TUI components; full-width divider lines frame every screen, and a
โฏindicator follows your cursor across all selection lists - ๐ Responsive Layout - Tables, forms, and progress bars adapt to terminal size; wide screens are fully utilized, narrow screens never overflow
- โจ๏ธ Unified Help Bar - Every screen shows a single-line shortcut bar with
[Key]prefix and action text, inline option descriptions (bright name + muted detail), auto-hidden on tiny terminals - ๐ป Cross-Platform - Works seamlessly on Linux, macOS, and Windows
easyGit is a Git workflow enhancement tool, not a replacement for Git commands.
We focus on:
- ๐ฏ Integrating multi-step workflows - Combining multiple Git commands into one interactive flow
- ๐ง Simplifying complex commands - Providing friendly UIs for hard-to-remember parameters
- ๐ Optimizing repetitive work - Batch operations and smart defaults
- โจ Enhancing user experience - Beautiful TUI with clear visual feedback
๐ Read more: Design Philosophy | ่ฎพ่ฎกๅฒๅญฆ (ไธญๆ)
See how much time you can save with easyGit:
| Operation | Native Git | easyGit | Time Saved |
|---|---|---|---|
| Commit all changes | git add .git commit -m "msg"git push |
easyGit pa |
~75% |
| Delete remote branch | git push origin --delete branch-name |
easyGit bd (interactive) |
~60% |
| Create & push tag | git tag v1.0.0git push origin v1.0.0 |
easyGit tc (with wizard) |
~70% |
| Merge feature branch | git checkout maingit merge featuregit push |
easyGit m (interactive) |
~65% |
| Rebase branch | git branch (find name)git rebase <branch> |
easyGit r (visual selector) |
~60% |
| Cherry-pick commit | git log (find hash)git cherry-pick <hash>git push |
easyGit cp (visual selector) |
~70% |
| Squash commits | git rebase -i (manual edit) |
easyGit sq (visual multi-select) |
~70% |
| Drop commits | git rebase -i (manual delete) |
easyGit d (visual multi-select) |
~75% |
Benefits:
- ๐ฏ Interactive Selection - No need to remember branch names, commit hashes, or tag names
- ๐ Workflow Integration - Multiple Git commands combined into one
- ๐ก Smart Defaults - Remembers your preferences (remote, branch, language)
- โ Error Prevention - Visual confirmation before destructive operations
- Git must be installed on your system
- Operating System: Linux / macOS / Windows 10+
- Git Version: 2.0+
- Terminal: Modern terminal with ANSI color support
- Disk Space: < 10MB
Linux / macOS:
# Using curl
curl -sSL https://raw.githubusercontent.com/KevinYouu/easyGit/main/install.sh | bash
# Or using wget
wget -qO- https://raw.githubusercontent.com/KevinYouu/easyGit/main/install.sh | bashWindows:
# Using PowerShell
iwr -useb https://raw.githubusercontent.com/KevinYouu/easyGit/main/install.ps1 | iexWorks on all platforms with Go installed:
git clone https://github.com/KevinYouu/easyGit.git
cd easyGit
./build.shAfter installation, verify that easyGit is working correctly:
# Check if easyGit is installed
easyGit version
# Expected output:
# easyGit version x.x.x
# Built with Go 1.21+
# Try a simple command
easyGit --helpIf you encounter any issues, see the FAQ section.
# No arguments? Open the interactive action menu (press Enter on a command)
easyGit
# Push all changes in the working directory
easyGit push-all # or: easyGit pa
# Push selected files in the working directory (status column M/A/D shown)
easyGit push-selected # or: easyGit ps
# Initialize easyGit configuration (usually auto-initialized on first run)
easyGit init๐ก Tips: In any selection list (commits, branches, tags, files) press
/to filter by text. In the commit message input, press โ/โ to reuse one of your last 10 messages.
# Create and push a tag
easyGit tag-create # or: easyGit tc
# Delete a tag
easyGit tag-delete # or: easyGit td
# Delete local or remote branches
easyGit branch-delete # or: easyGit bd
# Switch branches interactively (dirty workdir offers carry-over / auto-stash)
easyGit branch-switch # or: easyGit sw
# Create a branch, optionally push with upstream
easyGit branch-create # or: easyGit bc
# Manage stashes (save / browse / apply / drop / clear)
easyGit stash # or: easyGit st
# Amend the last commit (message / append files, safe force-push guidance)
easyGit amend # or: easyGit am
# Undo: restore HEAD to a previous checkpoint via reflog
easyGit undo # or: easyGit un
# Merge selected branch into current branch
# Conflicts open an in-tool resolution loop (edit โ continue/abort)
easyGit merge # or: easyGit m
# Rebase current branch onto another
# Conflicts open an in-tool resolution loop (edit โ continue/skip/abort)
easyGit rebase # or: easyGit r
# Cherry-pick commits
# Conflicts open the same resolution loop; batch stops gracefully on abort
easyGit cherry-pick # or: easyGit cp
# Reset to selected commit
easyGit reset # or: easyGit rs
# Squash contiguous commits into one (message keeps all original text, editable multi-line)
easyGit squash # or: easyGit sq
# Drop/Delete specific commits
easyGit drop # or: easyGit d
# Configure easyGit (language, theme, push settings incl. pull-before-push, commit types, tag version cap)
easyGit config
# Update easyGit
easyGit update- Auto (default): detects the terminal background (OSC 11 query) on startup; falls back to dark when the query is unsupported or in non-TTY environments.
- Manual: force a mode with the
--themeflag (runtime, highest priority) or persist a preference via the config center.
# One-time override (runtime priority)
easyGit --theme light push-all
# Persist a preference (takes effect on next startup)
easyGit config # โ Interface Theme โ Auto / Dark / LightPriority: --theme flag > config center setting > auto-detect.
| Command | Alias | Description | Use Case |
|---|---|---|---|
push-all |
pa |
Stage & commit all changes (optional body; pushes directly when nothing to commit) | Quick commits for all modifications |
push-selected |
ps |
Interactively select files to stage & commit (optional body) | Fine-grained control over what to commit |
stash |
st |
Manage stashes: save / browse / apply / drop | Park work-in-progress, rescue interrupted tasks |
amend |
am |
Amend last commit: message / append files | Fix the previous commit without leaving the flow |
| Command | Alias | Description | Use Case |
|---|---|---|---|
merge |
m |
Merge selected branch into current branch | Integrate feature branches |
branch-switch |
sw |
Switch branches interactively (local + remote) | Move between branches; remote auto-tracks |
branch-create |
bc |
Create a branch and optionally push with upstream | Start new work from any base point |
branch-delete |
bd |
Delete local or remote branches (extra confirmation before force-deleting unmerged branches) | Clean up merged or obsolete branches |
tag-create |
tc |
Create and push tags with semantic versioning | Release versioning (v1.0.0, v2.1.0, etc.) |
tag-delete |
td |
Delete tags locally and remotely | Remove incorrect or obsolete tags |
| Command | Alias | Description | Use Case |
|---|---|---|---|
rebase |
r |
Rebase current branch onto another | Keep a linear history |
cherry-pick |
cp |
Cherry-pick commits from other branches | Apply specific commits to current branch |
reset |
rs |
Reset repository to selected commit | Undo commits or move to previous state |
undo |
un |
Restore HEAD to a reflog checkpoint | "Oh no" recovery after a bad operation |
clean |
cl |
Discard changes & remove untracked files | Selective cleanup with full preview |
worktree |
wk |
Manage git worktrees (add/remove/list) | Parallel work on multiple branches |
squash |
sq |
Squash contiguous commits (keeps all original text) | Clean up local commit history (visual) |
drop |
d |
Delete specific commits | Remove unwanted commits from history |
| Command | Alias | Description | Use Case |
|---|---|---|---|
init |
- | Initialize easyGit configuration | First-time setup (usually automatic) |
config |
- | Open the interactive configuration center | Change language, theme, push settings (incl. pull-before-push), commit types, tag version cap, conflict editor |
update |
- | Update easyGit to latest version | Get new features and bug fixes |
version |
v |
Show current version information | Check installed version |
# Clone the repository
git clone https://github.com/KevinYouu/easyGit.git
cd easyGit
# Install dependencies
go mod tidy
# Build with version injection
./build.sh
# Or build manually
go build -o easyGit ./cmd/easygit# Run all tests
go test ./...
# Run specific package tests
go test ./internal/i18n
# Run benchmarks
go test -bench=. ./internal/i18neasyGit/
โโโ cmd/easygit/ # CLI commands and entry point
โ โโโ main.go # Application entry point
โ โโโ root.go # Root command setup
โ โโโ commands/ # Individual command implementations
โโโ internal/ # Internal packages
โ โโโ gitcmd/ # Git operation implementations
โ โโโ i18n/ # Internationalization
โ โโโ form/ # TUI form components
โ โโโ spinner/ # Loading animations
โ โโโ theme/ # Visual styling
โ โโโ config/ # Configuration management
โโโ docs/ # Documentation
โ
Fully compatible with native Git workflow
โ
Can be used alongside Git commands
โ
Does not modify .git directory structure
โ
Supports all Git hooks
easyGit focuses on workflow integration rather than replacing individual Git commands. It combines multiple Git operations into interactive flows, making complex tasks simple.
No. easyGit uses standard Git commands under the hood and doesn't modify your .git directory structure. You can safely use it alongside regular Git commands.
easyGit is designed for interactive terminal use. For CI/CD, we recommend using standard Git commands.
Please open an issue with:
- Your OS and Git version
- Steps to reproduce
- Expected vs actual behavior
# Check version
easyGit version
# Expected output
easyGit version x.x.x
Built with Go 1.21+Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Follow Go conventions and best practices
- Add tests for new features
- Update documentation as needed
- Ensure all commands support both English and Chinese
This project is licensed under the GPL-3.0 License - see the LICENSE file for details.
Built with these amazing open source projects:
- Go - The Go programming language
- Cobra - Powerful CLI framework
- Bubbletea v2 - Powerful TUI framework
- Bubbles v2 - TUI components for Bubbletea
- Huh v2 - Interactive terminal forms
- Lipgloss v2 - Style definitions for terminal UI
- SQLite - Pure Go SQLite implementation for configuration storage
- golang.org/x/term - Terminal utilities
- golang.org/x/text - Text processing and i18n support
Made with โค๏ธ by KevinYouu
