A Clean & Powerful Git Workflow Engine
Project description
AARU CLI
A Clean & Powerful Git Workflow Engine
Created by aarushlohit · github.com/aarushlohit · Zairok App
AARU wraps Git with a clean, opinionated command surface. Every destructive or side-effect action requires an explicit confirmation flag — you always see what will happen before it happens.
Table of Contents
Installation
Linux / macOS
git clone https://github.com/aarushlohit/GIT_PROTOCOL.git
cd GIT_PROTOCOL
./install.sh
Or manually:
pip install --user .
# Add to PATH if needed:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
Windows
git clone https://github.com/aarushlohit/GIT_PROTOCOL.git
cd GIT_PROTOCOL
install_windows.bat
Standalone Binary (no Python required)
./build_exe.sh
sudo cp dist/aaru /usr/local/bin/
Quick Start
# 1. Initialize a new repo
aaru init
# 2. Set your Git identity (one-time)
aaru config-user --name "Your Name" --email "you@example.com"
# 3. Do some work, then save it
aaru save "add login page"
# 4. Push to remote
aaru send --yes
# 5. Pull + push in one step
aaru sync
Command Reference
Info & Setup
aaru aaru
Display the ASCII art banner with system info (Git version, Python version, repo, remote URL).
aaru aaru
aaru config-user
Configure your Git user name and email globally. Interactive prompts if flags are omitted.
aaru config-user --name "Jane Doe" --email "jane@example.com"
aaru config-user # prompts for both
| Flag | Description |
|---|---|
--name, -n |
Your full name |
--email, -e |
Your email address |
Repository
aaru init
Initialize a new Git repository in the current directory and create a .aaru workspace folder.
aaru init
aaru clone <repo-url>
Clone a remote repository and set up the .aaru directory automatically.
aaru clone https://github.com/user/repo.git
aaru config
Print the current Git configuration (equivalent to git config --list).
aaru config
Workflow
aaru status
Show the working-tree status — modified files, staged files, untracked files.
aaru status
aaru save <message>
Stage all changed files and commit in one step.
Equivalent to: git add -A && git commit -m "<message>"
aaru save "fix navbar alignment"
aaru save "initial commit"
aaru history
Show a compact, decorated commit graph with branch pointers.
aaru history
aaru diff
Show unstaged changes in the working tree.
aaru diff
aaru undo
Soft-undo the last commit. Keeps all your changes in the working tree (nothing is lost).
Equivalent to: git reset HEAD~1
Without --confirm: shows which commit would be undone — does NOT undo yet.
With --confirm: actually runs the undo.
aaru undo # preview: "Would undo: abc1234 fix navbar"
aaru undo --confirm # actually undoes the commit
| Flag | Description |
|---|---|
--confirm |
Required to actually execute the undo |
Branch
aaru create <branch>
Create a new branch. By default you stay on your current branch — the new branch is created but not switched to.
aaru create feature/login # creates branch, stays where you are
aaru create feature/login --switch # creates AND switches to it
| Flag | Description |
|---|---|
--switch |
Switch to the new branch after creating it |
aaru switch <branch>
Switch to an existing branch.
aaru switch main
aaru switch feature/login
aaru delete <branch>
Delete a branch. Safe by default — refuses if the branch has unmerged commits.
Requires --confirm to actually execute.
aaru delete old-branch # blocked: shows error with instructions
aaru delete old-branch --confirm # safe delete (refuses if unmerged)
aaru delete old-branch --force --confirm # force-delete even if unmerged
| Flag | Description |
|---|---|
--confirm |
Required to actually delete |
--force |
Force-delete even if branch has unmerged commits |
aaru branches
List all local and remote branches.
aaru branches
Remote
aaru send
Push the current branch to its remote tracking branch.
Without --yes: shows a preview of commits that would be pushed — does NOT push.
With --yes: actually pushes.
aaru send # preview: shows commits to be pushed
aaru send --yes # push confirmed
| Flag | Description |
|---|---|
--yes |
Confirm and execute the push |
aaru update
Fetch all remotes without merging. Equivalent to git fetch --all.
aaru update
aaru sync
Pull remote changes then push local commits in one step.
Equivalent to: git pull && git push
Use --no-push to only pull without pushing.
aaru sync # pull + push
aaru sync --no-push # pull only
| Flag | Description |
|---|---|
--no-push |
Pull only — skip the push step |
aaru add-upstream <url>
Add the upstream remote for a forked repository (one-time setup before using fork-sync).
Prompts for URL if not provided.
aaru add-upstream https://github.com/original/repo.git
aaru add-upstream # prompts for URL
aaru fork-sync
Sync your fork with the original upstream repository.
Steps performed:
- Fetch from
upstreamremote - Merge
upstream/<current-branch>into your local branch - Push the updated branch to
origin(your fork)
# One-time setup:
aaru add-upstream https://github.com/original/repo.git
# Then sync any time:
aaru fork-sync # fetch + merge + push
aaru fork-sync --no-push # fetch + merge only (don't push)
aaru fork-sync myupstream # use a different upstream remote name
| Argument / Flag | Description |
|---|---|
[upstream] |
Name of the upstream remote (default: upstream) |
--no-push |
Pull from upstream only — skip pushing to origin |
aaru checkout-pr <number>
Fetch a pull request as a local branch for testing.
Without --switch: fetches the PR branch, you stay on your current branch.
With --switch: fetches and switches to the PR branch.
aaru checkout-pr 42 # fetch PR #42, stay on current branch
aaru checkout-pr 42 --switch # fetch and switch to pr-42
aaru checkout-pr 42 --remote upstream # fetch from a different remote
| Flag | Description |
|---|---|
--switch |
Switch to the PR branch after fetching |
--remote, -r |
Remote to fetch from (default: origin) |
Stash
aaru stash [label]
Stash all current working-tree changes. Optionally tag the stash with a label.
aaru stash # stash with no label
aaru stash "wip: auth refactor" # stash with a descriptive label
aaru stash-pop
Apply the most recent stash and remove it from the stash list.
aaru stash-pop
aaru stash-list
List all saved stashes.
aaru stash-list
Raw Passthrough
aaru raw -- <git args>
Pass any git command directly through the AARU pipeline. Use -- to separate AARU flags from git flags.
aaru raw -- log --oneline -10
aaru raw -- rebase -i HEAD~3
aaru raw -- remote -v
aaru raw -- cherry-pick abc1234
Note: The
--separator is required whenever your git command includes flags (anything starting with-).
Safety Model
AARU follows one rule: commands with side effects are safe by default and require an explicit opt-in flag.
| Command | Without the flag | Opt-in flag |
|---|---|---|
send |
Shows preview of commits to push | --yes to push |
undo |
Shows which commit would be undone | --confirm to run |
delete |
Shows error with instructions | --confirm to delete |
delete (unmerged) |
Shows error with instructions | --force --confirm |
create |
Creates branch, stays on current | --switch to also switch |
checkout-pr |
Fetches PR, stays on current branch | --switch to also switch |
sync |
Pull + push | --no-push to skip push |
fork-sync |
Fetch + merge + push | --no-push to skip push |
Real-World Workflows
Starting a new feature
aaru status # check current state
aaru create feature/user-auth # create branch, stay on current
aaru switch feature/user-auth # switch to it when ready
# ... write code ...
aaru save "add JWT middleware"
aaru send --yes # push to remote
Undoing a bad commit
aaru undo # preview: "Would undo: abc1234 oops wrong file"
aaru undo --confirm # actually undo it
# fix your files
aaru save "correct commit message"
Syncing a fork with upstream
# One-time setup
aaru add-upstream https://github.com/original/project.git
# Every time you want to sync
aaru fork-sync # fetch upstream + merge + push to your fork
aaru fork-sync --no-push # only pull from upstream, review before pushing
Testing a pull request locally
aaru checkout-pr 84 # fetch pr-84, stay on current branch
# review the diff with: aaru diff
aaru checkout-pr 84 --switch # now switch to it and test
aaru switch main # done testing, switch back
Saving work-in-progress before switching context
aaru stash "wip: payment flow" # stash current work with a label
aaru switch hotfix/login-crash # switch context
# ... fix the bug ...
aaru save "fix login crash on mobile"
aaru send --yes
aaru switch feature/payment # come back
aaru stash-pop # restore your work
Cleaning up old branches
aaru branches # see all branches
aaru delete old-experiment # blocked — shows what to add
aaru delete old-experiment --confirm # safe delete
aaru delete wip-never-merged --force --confirm # force delete unmerged branch
Getting Help
Every command has built-in help:
aaru --help
aaru <command> --help
# Examples:
aaru send --help
aaru delete --help
aaru fork-sync --help
aaru checkout-pr --help
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aarushlohit_git-1.2.0.tar.gz.
File metadata
- Download URL: aarushlohit_git-1.2.0.tar.gz
- Upload date:
- Size: 37.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be71abee84b54ead3fbe02d9481b8c9793f420b25696de6ed5a09c40b0a536e3
|
|
| MD5 |
13fb6c7b85d5b82be46d3324937a8e03
|
|
| BLAKE2b-256 |
54032e7d0b47f27a1f297d146b87d66058676c011ed35cfc3309d2c8d80d3e70
|
File details
Details for the file aarushlohit_git-1.2.0-py3-none-any.whl.
File metadata
- Download URL: aarushlohit_git-1.2.0-py3-none-any.whl
- Upload date:
- Size: 35.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d054fb9aaba5b2bb8dffd58d30a841fd22a8e26ebbefc8d40205600827d4539d
|
|
| MD5 |
43bcdaa3ae06d2a43726cb56446325a2
|
|
| BLAKE2b-256 |
e5f760dd7810ecb9cbf888af54f41e186d851872716d47ee0c14a2de02fe76a2
|