plain-git Changelog
[1.0.0-alpha] — Phase 1 Core Setup (2025-11-09)
✨ Added
- CLI entry point with figlet banner and interactive menu (
src/cli/index.ts) - Git environment detection (
src/core/GitDetector.ts) - Git command executor (
src/core/GitExecutor.ts) - Logger utility for styled console output (
src/utils/Logger.ts)
⚙️ Configuration
- Configured TypeScript (CommonJS, ES2020 target)
- Added npm scripts for build, dev, and clean
- Added cross-platform dependency setup (chalk, inquirer, figlet)
📦 CHANGELOG — v1.0.0-beta.1
Release Date: 2025-11-21
Status: Beta Release
This is the first public beta of plain-git, introducing the complete baseline architecture, CLI, managers, and test suite.
The release focuses on full interactive Git workflows powered by plain-English commands and a fully extensible manager-based system.
🚀 Highlights
- Brand-new interactive CLI with clean UX, categorized menus, colored output, and dynamic prompts.
- Complete Git operation abstraction through specialized managers.
- Fully implemented test suite (Vitest) for every manager.
- Internal system architecture finalized for beta stability.
- Ready for external contributors, issue tracking, and PR workflows.
🛠 Added
Core System
- Full CLI entrypoint with:
- ASCII banner
- Environment checks
- Dynamic command mapping
- Current-branch indicator
- Grouped menu categories
- Added HandleCommands core dispatcher.
- Implemented project-wide Logger with color-coded output.
Managers (Complete Feature Set)
RepositoryManager
- Init repository (standard / bare)
- Clone repo
- Show status (short / long)
- Show & set Git config
- Manage remotes (add / update / remove / list)
- Show repo info
- Repository integrity check (
git fsck) - GC / repository optimization
BranchManager
- Create branch
- Create & switch
- Switch existing branch
- Delete branch (safe & force)
- Rename branch
- List branches
- Show current branch
- Push & set upstream
CommitManager
- Stage all files
- Stage selected files
- Unstage selected files
- Commit changes
- Amend last commit
- Undo last commit (soft)
- Show last commit details
- Show log (graph, detailed, compact)
- Show diff (unstaged, staged)
RemoteManager
- List remotes
- Add / rename / remove remote
- Push (simple & upstream)
- Pull
- Fetch
- Show remote info
- Sync all remotes
StashManager
- Create stash (optionally with message)
- List stashes
- Apply stash
- Pop stash
- Drop stash
- Clear all stashes
TagManager
- List tags
- Create tag (lightweight & annotated)
- Show tag details
- Delete tag
- Push all tags
- Push single tag
MergeManager
- Merge selected branch
- Detect merge conflicts
- Show conflicting files
- Abort merge
- Continue merge
ConflictManager
- List files with conflict markers
- Inspect conflict markers inside selected file
- Open file in editor
- Show diff for conflicting file
- Conflict resolution guide
RebaseManager
- Start rebase
- Interactive rebase
- Continue / skip / abort
- Detect conflicts
HistoryManager
- Show history (multiple formats)
- Reflog
- Commit details
- Compare commits
- File diff
- File history
- Blame
- Author summary
ResetManager
- Undo last commit (soft / mixed / hard)
- Reset to specific commit
- Discard file changes
- Clean untracked files
- Interactive reset flow
🧰 Developer ExperienceTooling
- Auto-detects missing Git installations
- Prompts to initialize repo if
.gitfolder missing - Clean console output with emojis and colored text
- Global CLI executable (
plain-git) via npm bin
🟢 Status: Phase 1 complete
🧩 Next: Phase 2 – Add RepositoryManager, BranchManager, CommitManager
- Completed Vitest test suites for all managers.
- Added mocks for:
inquirerexecSyncfsGitExecutor
- Sandbox-safe testing environment.
- Added path alias support (
@/...).
🧹 Changed / Improved
- Refactored GitExecutor to handle stdout/stderr cleanly.
- Improved command substitution handling.
- Added current-branch display in menu banner.
- Cleaner UX in grouped menu system.
- Updated internal mapping structure for dynamic command handlers.
- Normalized output logs across all managers.
🐛 Fixed
- Fixed issues with
git fsckoutput not showing. - Fixed terminal menu scrolling issue.
- Fixed sandbox repo accidentally being tracked.
- Fixed repeated menu rendering bug.
- Fixed incorrect placeholder replacements in command list.
🧪 Testing
Added test suites for:
- RepositoryManager
- BranchManager
- CommitManager
- RemoteManager
- StashManager
- TagManager
- MergeManager
- ConflictManager
- RebaseManager
- HistoryManager
- ResetManager
Ensured:
- Fully mocked STDIN/STDOUT
- No real Git operations
- No async timeouts
- Deterministic CI behavior
⚙️ Internal Architecture Finalized
The beta finalizes the stable core architecture for all future expansions:
- Git abstraction layer (GitExecutor)
- Manager registry
- Command handler dispatcher
- CLI lifecycle:
banner → environment check → menu → command execution - Test-ready modular design
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix heading level increment.
The heading level jumps from h1 to h3, skipping h2. Markdown best practices require incrementing heading levels by one at a time.
Apply this diff:
📝 Committable suggestion
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
2-2: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
🤖 Prompt for AI Agents