ggc
A Go Git CLI.
This logo was created by gopherize.me.
Demo
Overview
ggc is a Git tool written in Go, offering both traditional CLI commands and an interactive interface with incremental search. You can either run subcommands like ggc add directly, or launch the interactive mode by simply typing ggc. Designed to be fast, user-friendly, and extensible.
Features
Traditional command-line interface (CLI): Run ggc [args] to execute specific operations directly.
Interactive interface: Run ggc with no arguments to launch an incremental search UI for command selection.
Simple commands for common Git operations (add, push, pull, branch, log, etc.)
Composite commands that combine multiple Git operations
Interactive UI for branch/file selection and message input
Implemented using the Go standard library and: golang.org/x/term – for terminal interaction golang.org/x/sys – for low-level OS interaction gopkg.in/yaml.v3 – for parsing ~/.ggcconfig.yaml
Supported Environments
OS: macOS (Apple Silicon/Intel) - Verified
Go version: 1.24 or later recommended
Dependencies: Go standard library, golang.org/x/term , golang.org/x/sys , gopkg.in/yaml.v3
, , Requirement: git command must be installed
Installation
Pre-compiled Binaries (Recommended)
Pre-compiled binaries are available for multiple platforms and architectures. This is the fastest way to get started with ggc .
Download from Releases
Visit the Releases page to download the latest binary for your platform:
Supported Platforms:
macOS: darwin_amd64 (Intel), darwin_arm64 (Apple Silicon)
(Intel), (Apple Silicon) Linux: linux_amd64 , linux_arm64
, Windows: windows_amd64
Quick Install with Script
The easiest way to install ggc is using the provided installation script:
# Download and run the installation script curl -sSL https://raw.githubusercontent.com/bmf-san/ggc/main/install.sh | bash
Or download and run it manually:
# Download the script curl -O https://raw.githubusercontent.com/bmf-san/ggc/main/install.sh # Make it executable chmod +x install.sh # Run the script ./install.sh
The script will:
Detect your operating system and architecture
Download the appropriate binary for your system
Install using git , manual go install fallback
, manual fallback Verify the installation
Build with make
git clone < repository URL > make build
Place the ggc binary in a directory included in your PATH.
Development Setup
For development, you can use the Makefile to install required tools and dependencies:
# Install all dependencies and tools make deps # Run formatter make fmt # Run tests make test # Run linter make lint # Run tests with coverage make cover # Run tests and lint make test-and-lint # Build with go build make build # Build and run with version info make run
The Makefile will automatically install required tools like golangci-lint using go install .
Global install with go install
go install github.com/bmf-san/ggc@latest
The ggc binary will be installed to $GOBIN (usually $HOME/go/bin ).
binary will be installed to (usually ). If $GOBIN is in your PATH , you can use ggc from anywhere.
is in your , you can use from anywhere. If not, add it to your PATH :
Note When using go install , you may get limited version info due to ldflags not working with go install . It is recommended to build with make build or use the install script or binaries.
export PATH= $PATH : $( go env GOBIN ) # or export PATH= $PATH : $HOME /go/bin
Usage
Interactive Command Selection (Incremental Search UI)
Just run:
ggc
Type to filter commands (incremental search)
Use ctrl+n/ctrl+p to move selection, Enter to execute
If a command requires arguments (e.g. , , ), you will be prompted for input (always left-aligned)
, , ), you will be prompted for input (always left-aligned) After command execution, results are displayed and you can press Enter to continue
After viewing results, you return to the command selection screen for continuous use
Use "quit" command or ctrl+c to exit interactive mode
All UI and prompts are in English
Available Commands
Command Description add Add specific file to the index add . Add all changes add -p Add changes interactively branch current Show current branch branch checkout Checkout existing branch branch checkout-remote Checkout remote branch branch create Create and checkout new branch branch delete Delete a branch branch delete-merged Delete merged branches branch list-local List local branches branch list-remote List remote branches clean files Clean untracked files clean dirs Clean untracked directories commit Commit staged changes commit amend Amend previous commit commit amend --no-edit Amend without editing message commit allow-empty Create an empty commit commit tmp Create temporary commit diff staged Show staged changes diff unstaged Show unstaged changes fetch --prune Fetch and prune remotes log simple Show commit logs in simple format log graph Show commit logs with a graph pull current Pull current branch pull rebase Pull with rebase push current Push current branch push force Force push current branch rebase Rebase current branch remote list List remotes remote add Add a new remote remote remove Remove a remote remote set-url Change remote URL config list List config variables config get Get value for config key config set Set config key and value hook list List all hooks hook install Install a hook hook enable Enable a hook hook disable Disable a hook hook uninstall Remove a hook hook edit Edit a hook restore Restore file in working directory from index restore . Restore all files in working directory from index restore staged Unstage file (restore from HEAD to index) restore staged . Unstage all files restore Restore file from specific commit tag list List all tags tag create Create a tag tag annotated Create annotated tag tag delete Delete a tag tag push Push all tags tag push Push specific tag tag show Show tag details stash Stash current changes stash pop Apply and remove latest stash stash drop Remove latest stash status short Show concise status version Show current ggc version
Directory Structure
main.go # Entry point router/ # Command routing logic cmd/ # Command entry handlers git/ # Git operation wrappers
Shell Completion
Bash
Add the following to your ~/.bash_profile or ~/.bashrc :
if [ -f " $( go env GOPATH ) /pkg/mod/github.com/bmf-san/ggc@*/tools/completions/ggc.bash " ] ; then . " $( go env GOPATH ) " /pkg/mod/github.com/bmf-san/ggc@ * /tools/completions/ggc.bash fi
Zsh
Add the following to your ~/.zshrc :
if [ -f " $( go env GOPATH ) /pkg/mod/github.com/bmf-san/ggc@*/tools/completions/ggc.zsh " ] ; then . " $( go env GOPATH ) " /pkg/mod/github.com/bmf-san/ggc@ * /tools/completions/ggc.zsh fi
Fish
Add the following to your ~/.config/fish/config.fish :
if test -f (go env GOPATH)/pkg/mod/github.com/bmf-san/ggc@ * /tools/completions/ggc.fish source (go env GOPATH)/pkg/mod/github.com/bmf-san/ggc@ * /tools/completions/ggc.fish end
This setup will automatically find the completion script regardless of the installed version.
References
Official Git Documentation
Git Documentation - Complete Git reference documentation
Git Tutorial - Official Git tutorial for beginners
Git User Manual - Comprehensive Git user guide
Implemented Git Commands
Below are the Git commands that ggc wraps, along with links to their official documentation:
File Operations
git add - Add file contents to the index
- Add file contents to the index git clean - Remove untracked files from the working tree
- Remove untracked files from the working tree git restore - Restore files in the working tree
Branch Operations
git branch - List, create, or delete branches
- List, create, or delete branches git checkout - Switch branches or restore working tree files
Commit Operations
git commit - Record changes to the repository
- Record changes to the repository git log - Show commit logs
Remote Operations
git push - Update remote refs along with associated objects
- Update remote refs along with associated objects git pull - Fetch from and integrate with another repository or a local branch
- Fetch from and integrate with another repository or a local branch git fetch - Download objects and refs from another repository
- Download objects and refs from another repository git remote - Manage set of tracked repositories
Repository State
git status - Show the working tree status
- Show the working tree status git diff - Show changes between commits, commit and working tree, etc
- Show changes between commits, commit and working tree, etc git stash - Stash the changes in a dirty working directory away
Configuration and Maintenance
git config - Get and set repository or global options
- Get and set repository or global options git tag - Create, list, delete or verify a tag object signed with GPG
- Create, list, delete or verify a tag object signed with GPG git rebase - Reapply commits on top of another base tip
Git Workflow Resources
Git Workflow - Official Git workflow documentation
Git Best Practices - Branching workflows from Pro Git book
Conventional Commits - Specification for commit message format
Git Hooks - Customizing Git with hooks
Related Tools and Resources
Alternative Git Tools
lazygit - Simple terminal UI for Git commands
tig - Text-mode interface for Git
gitui - Blazing fast terminal-ui for Git
magit - Git interface for Emacs
Contributing
See CONTRIBUTING.md and CODE_OF_CONDUCT.md for details.
Sponsor
If you’d like to support my work, please consider sponsoring me!
GitHub Sponsors – bmf-san
Or simply giving ⭐ on GitHub is greatly appreciated—it keeps me motivated to maintain and improve the project! :D
Stargazers
Forkers
License
This project is licensed under the MIT License - see the LICENSE.md file for details.