QuiCommit

English | 中文文档

A powerful AI-powered Git assistant for generating conventional commits, tags, and changelogs. Manage multiple Git profiles for different work contexts.

[Still in early development, some features may not be complete. Feedback and contributions are welcome.]

⚠️ Important Notice: QuiCommit now uses system keyring to store API keys securely. This change may cause breaking changes to your existing configuration. If you encounter issues after updating, please run quicommit config reset --force to reset your configuration, then reconfigure your settings.

Rust License Crates.io Version

Features

  • AI-Powered Generation: Generate commits, tags, and changelogs using LLM APIs (Ollama, OpenAI, Anthropic, Kimi, DeepSeek, OpenRouter) or local models
  • Conventional Commits: Full support for Conventional Commits and commitlint formats
  • Profile Management: Manage multiple Git identities with SSH keys and GPG signing support
  • Smart Tagging: Semantic version bumping with AI-generated release notes
  • Changelog Generation: Automatic changelog generation in Keep a Changelog format
  • Security: Use system keyring to store API keys securely
  • Interactive UI: Beautiful CLI with previews and confirmations

Installation

Cargo Install

The cargo-installed version may temporarily lag behind the source code progress.

cargo install quicommit

Install from Source

git clone https://git.lyz.one/SidneyZhang/QuiCommit.git
cd QuiCommit
cargo build --release
cargo install --path .

Requirements: Rust 1.70+, Git 2.0+

Quick Start

Initialize

quicommit init

Generate Commit

# AI-generated commit (default)
quicommit commit

# Manual commit
quicommit commit --manual -t feat -m "add new feature"

# Stage all and commit
quicommit commit -a

# Skip confirmation
quicommit commit --yes

# Use date-based commit message
quicommit commit --date

# Push after committing
quicommit commit --push

Create Tag

# Auto-detect version bump
quicommit tag

# Specify bump type
quicommit tag --bump minor

# Custom tag name
quicommit tag -n v1.0.0

# AI-generate tag message
quicommit tag --generate

# Create tag and push to remote
quicommit tag --push

Generate Changelog

# Generate for unreleased changes
quicommit changelog

# Generate for specific version
quicommit changelog -v 1.0.0

# AI-generate changelog
quicommit changelog --generate

# Initialize new changelog file
quicommit changelog --init

# Specify output file
quicommit changelog -o RELEASE_NOTES.md

Manage Profiles

# Add new profile
quicommit profile add

# List profiles
quicommit profile list

# Show profile details
quicommit profile show

# Switch profile
quicommit profile switch

# Set default profile
quicommit profile set-default personal

# Set profile for current repo
quicommit profile set-repo personal

# Apply profile to current repo
quicommit profile apply

# Apply profile globally
quicommit profile apply --global

# Copy profile
quicommit profile copy personal work

# Edit profile
quicommit profile edit personal

# Remove profile
quicommit profile remove old-profile

# Check profile
quicommit profile check

# View usage statistics
quicommit profile stats

# Manage profile tokens
quicommit profile token

Configure LLM

# Configure Ollama (local)
quicommit config set-llm ollama
quicommit config set-llm ollama --url http://localhost:11434 --model llama2

# Configure OpenAI
quicommit config set-llm openai
quicommit config set-api-key YOUR_API_KEY

# Configure Anthropic Claude
quicommit config set-llm anthropic
quicommit config set-api-key YOUR_API_KEY

# Configure Kimi (Moonshot AI)
quicommit config set-llm kimi
quicommit config set-api-key YOUR_API_KEY
quicommit config set-llm kimi --base-url https://api.moonshot.cn/v1 --model moonshot-v1-8k

# Configure DeepSeek
quicommit config set-llm deepseek
quicommit config set-api-key YOUR_API_KEY
quicommit config set-llm deepseek --base-url https://api.deepseek.com/v1 --model deepseek-chat

# Configure OpenRouter
quicommit config set-llm openrouter
quicommit config set-api-key YOUR_API_KEY
quicommit config set-llm openrouter --base-url https://openrouter.ai/api/v1 --model openai/gpt-4

# Set commit format
quicommit config set-commit-format conventional

# Set version prefix
quicommit config set-version-prefix v

# Set changelog path
quicommit config set-changelog-path CHANGELOG.md

# Set output language
quicommit config set-language en

# Set keep commit types in English
quicommit config set-keep-types-english true

# Set keep changelog types in English
quicommit config set-keep-changelog-types-english true

# Test LLM connection
quicommit config test-llm

# Check keyring availability
quicommit config check-keyring

# Show config file path
quicommit config path

# Reset configuration to defaults
quicommit config reset --force

Command Reference

Command Alias Description
quicommit init i Initialize configuration
quicommit commit c Generate and create commit
quicommit tag t Generate and create tag
quicommit changelog cl Generate changelog
quicommit profile p Manage Git profiles
quicommit config cfg Manage settings

Commit Options

Option Description
--commit-type Commit type (feat, fix, etc.)
-s, --scope Commit scope
-m, --message Commit description
--body Commit body
-b, --breaking Mark as breaking change
-d, --date Use date-based commit message
--manual Manual input, skip AI
-a, --all Stage all changes
-S, --sign GPG sign commit
--amend Amend previous commit
--dry-run Show without committing
--conventional Use Conventional Commits format
--commitlint Use commitlint format
--no-verify Skip commit message verification
-y, --yes Skip confirmation
--push Push after committing
--remote Specify remote repository (default: origin)

Tag Options

Option Description
-n, --name Tag name
-b, --bump Version bump (major/minor/patch)
-m, --message Tag message
-g, --generate AI-generate message
-S, --sign GPG sign tag
-l, --lightweight Create lightweight tag
-f, --force Force overwrite existing tag
-p, --push Push to remote
-r, --remote Specify remote repository (default: origin)
--dry-run Dry run
-y, --yes Skip confirmation

Changelog Options

Option Description
-o, --output Output file path
-v, --version Generate for specific version
-f, --from Generate from specific tag
-t, --to Generate to specific ref (default: HEAD)
-i, --init Initialize new changelog file
-g, --generate AI-generate changelog
--prepend Prepend to existing changelog
--include-hashes Include commit hashes
--include-authors Include authors
--format Format (keep-a-changelog, github-releases)
--dry-run Dry run (output to stdout)
-y, --yes Skip confirmation

Configuration File

Location:

  • Linux: ~/.config/quicommit/config.toml
  • macOS: ~/Library/Application Support/quicommit/config.toml
  • Windows: %APPDATA%\quicommit\config.toml
version = "1"
default_profile = "personal"

[profiles.personal]
name = "personal"
user_name = "Your Name"
user_email = "your.email@example.com"
description = "Personal projects"
is_work = false

[profiles.work]
name = "work"
user_name = "Your Name"
user_email = "your.name@company.com"
description = "Work projects"
is_work = true
organization = "Your Company"

[profiles.work.ssh]
private_key_path = "/home/user/.ssh/id_rsa_work"
agent_forwarding = true

[profiles.work.gpg]
key_id = "YOUR_GPG_KEY_ID"
program = "gpg"
use_agent = true

[llm]
provider = "ollama"
max_tokens = 500
temperature = 0.7
timeout = 30

[llm.ollama]
url = "http://localhost:11434"
model = "llama2"

[llm.openai]
model = "gpt-4"
base_url = "https://api.openai.com/v1"

[llm.anthropic]
model = "claude-3-sonnet-20240229"

[llm.kimi]
model = "moonshot-v1-8k"

[llm.deepseek]
model = "deepseek-chat"

[llm.openrouter]
model = "openai/gpt-4"

[commit]
format = "conventional"
auto_generate = true
allow_empty = false
gpg_sign = false
max_subject_length = 100
require_scope = false
require_body = false
body_required_types = ["feat", "fix"]

[tag]
version_prefix = "v"
auto_generate = true
gpg_sign = false
include_changelog = true

[changelog]
path = "CHANGELOG.md"
auto_generate = true
format = "keep-a-changelog"
include_hashes = false
include_authors = false
group_by_type = true

[theme]
colors = true
icons = true
date_format = "%Y-%m-%d"

[repo_profiles]
"/path/to/work/project" = "work"
"/path/to/personal/project" = "personal"

Environment Variables

Variable Description
QUICOMMIT_CONFIG Configuration file path
EDITOR Default editor
NO_COLOR Disable colored output

Troubleshooting

# View current configuration
quicommit config list

# Show configuration details
quicommit config show

# Edit configuration file
quicommit config edit

# Set configuration value
quicommit config set llm.provider ollama

# Get configuration value
quicommit config get llm.provider

# Set API key (stored in system keyring)
quicommit config set-api-key YOUR_API_KEY

# Delete API key from keyring
quicommit config delete-api-key

# Test LLM connection
quicommit config test-llm

# List available models
quicommit config list-models

# Check keyring availability
quicommit config check-keyring

# Show config file path
quicommit config path

# Export configuration
quicommit config export -o config-backup.toml

# Import configuration
quicommit config import -i config-backup.toml

# Reset configuration
quicommit config reset --force

Contributing

Contributions are welcome! Please follow these steps:

Submit a Pull Request

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/your-feature
  3. Commit changes: git commit -m 'feat: add new feature'
  4. Push branch: git push origin feature/your-feature
  5. Open a Pull Request

Development Setup

# Clone repository
git clone https://git.lyz.one/SidneyZhang/QuiCommit.git
cd QuiCommit

# Fetch dependencies
cargo fetch

# Run in development mode
cargo run -- commit --help

# Run tests
cargo test

# Code quality checks
cargo clippy
cargo fmt --check

Code Standards

  • Follow Rust formatting (run cargo fmt)
  • Use Conventional Commits for commit messages
  • Add tests for new features
  • Ensure cargo clippy passes with no warnings

Project Structure

src/
├── commands/    # CLI command implementations
│   ├── commit.rs
│   ├── tag.rs
│   ├── changelog.rs
│   ├── profile.rs
│   ├── config.rs
│   └── init.rs
├── config/      # Configuration management
│   ├── manager.rs
│   └── profile.rs
├── generator/   # AI content generation
├── git/         # Git operations
│   ├── commit.rs
│   ├── tag.rs
│   └── changelog.rs
├── llm/         # LLM provider implementations
│   ├── ollama.rs
│   ├── openai.rs
│   ├── anthropic.rs
│   ├── kimi.rs
│   ├── deepseek.rs
│   └── openrouter.rs
├── i18n/        # Internationalization support
│   ├── messages.rs
│   └── translator.rs
├── utils/       # Utility functions
│   ├── validators.rs
│   ├── formatter.rs
│   ├── crypto.rs
│   └── editor.rs
└── main.rs      # Program entry point

License

MIT License

Acknowledgments

Description
A powerful Git assistant tool with AI-powered commit/tag/changelog generation.
Readme MIT 767 KiB
v0.1.10 Latest
2026-03-19 08:40:41 +00:00
Languages
Rust 99.6%
Makefile 0.4%