gitcommit - Git Commit Date Setter

A command-line tool that enables developers to create Git commits with specific historical dates while maintaining chronological integrity.
Features
- β¨ Create commits with custom dates in format
YYYY-MM-DD HH:MM:SS
- π Validates dates maintain chronological order (no backdating before last commit)
- π Automatic local timezone detection
- π Fast and lightweight (Go stdlib only, no external dependencies)
- π Clear, actionable error messages
- β
POSIX-compliant CLI interface (
--help, --version)
Installation
From Source
git clone https://github.com/sgaunet/gitcommit.git
cd gitcommit
make install
Verify Installation
gitcommit --version
Quick Start
# Stage your changes
git add .
# Create commit with custom date
gitcommit "2025-02-05 20:19:19" "Historical commit message"
Usage
gitcommit <date> <message>
Arguments:
<date>: Date and time in format YYYY-MM-DD HH:MM:SS
<message>: Commit message text
Flags:
--help, -h: Show usage information
--version, -v: Show version number
Examples
# Basic usage
gitcommit "2025-02-05 20:19:19" "Add feature X"
# Backdating offline work
gitcommit "2025-01-15 10:00:00" "Work done offline"
# First commit in new repository
git init
git add README.md
gitcommit "2025-01-01 00:00:00" "Initial commit"
Requirements
- Go: 1.21 or later (for building)
- Git: 2.20 or later
- Platforms: Linux, macOS, Windows
- β
Format:
YYYY-MM-DD HH:MM:SS (24-hour time)
- β
Date must be after the last commit in the repository
- β
Future dates are allowed
- β
Empty repositories accept any date
- β Dates equal to or before the last commit are rejected
Development
# Build
make build
# Run tests
make test
# Run linter
make lint
# Format code
make fmt
# View all commands
make help
Testing
# Run all tests with coverage
make coverage
# Run specific test
go test -v ./internal/datetime/...
Architecture
cmd/gitcommit/ # CLI entry point
internal/
βββ cli/ # CLI logic and orchestration
βββ datetime/ # Date parsing, validation, formatting
βββ git/ # Git repository operations
tests/
βββ integration/ # Integration tests
βββ testdata/ # Test fixtures
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature)
- Commit your changes
- Push to the branch
- Open a Pull Request
License
MIT License - see LICENSE file for details.
Use Cases
- π
Organizing repository history chronologically
- πΌ Backdating work done offline
- π Migrating commits from other version control systems
- π Maintaining accurate project timelines
Troubleshooting
Error: "Invalid date format"
- Use exact format:
YYYY-MM-DD HH:MM:SS
- Example:
2025-02-05 20:19:19
Error: "Chronology violation"
- Ensure date is after your last commit
- Check:
git log -1 --format="%aI"
Error: "Not a Git repository"
- Run from inside a Git repository
- Or initialize:
git init
- Date parsing & validation: <10ms
- Git operations: <100ms
- Total operation: <200ms (p95)
Credits
Built with β€οΈ using Go standard library only.
Version: 1.0.0
Status: Production Ready