Git Skill
SkillMonitoring & opsFull git workflow for developers: status, staging, commits, branches, push/pull, merge/rebase, conflict resolution, stash, history (log/blame/bisect), remotes, tags, worktrees, cherry-pick, and recovery with reflog. The everyday operations live in the git tool; this skill covers the rest. Use for any local version-control task; use the github skill (gh) only for the GitHub API (PRs, issues, CI).
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Git Skill skill
What this skill tells your AI
The instructions your AI receives, as published by navinspire-ia/navin in navin/skills/git/SKILL.md and read by ahel’s review.
Complete local version-control workflow with the git CLI. Works the same on Linux, macOS, Windows, and WSL. For GitHub-specific actions (PRs, issues, CI runs) use the github skill (gh) instead - everything else lives here.
Reach for the git tool first. It covers the whole everyday workflow - status, diff, log, show, blame, branches, add, commit, restore, switch, stash, fetch, push, pull, merge, rebase, reset - with parsed output, paths checked against the workspace, and no way for git to stop at an editor or a credential prompt. Conflicted merges and rebases are resumed through the tool too: step=continue, step=abort, step=skip.
The commands below are for what the tool does not model: revert, reflog, bisect, cherry-pick, tags, worktrees, remotes, and commit --amend.
Judgement calls, not restrictions:
reset --hard,push --force,clean -fdandbranch -Ddestroy work that no checkpoint covers. Use them when that is the intent, and say what is being dropped.- Rewriting history already pushed to a shared branch breaks everyone else's clone. Prefer a revert.
- Never use interactive flags (
rebase -i,add -i,add -p) - they hang without a TTY. Use the non-interactive equivalents below. - Commit when the work is at a coherent point or the user asks; do not commit someone else's uncommitted changes along with yours.
Inspect state
git status # working tree + staging area
git diff # unstaged changes
git diff --staged # staged changes
git log --oneline --graph -15 # recent history
git show <commit> # one commit's diff + message
git blame -L 20,40 path/file.py # who last touched lines 20-40
Stage and commit
git add path/file.py another/file.ts # stage specific files (prefer over `git add .`)
git restore --staged path/file.py # unstage
git commit -m "fix: handle empty payload in parser"
Multi-line commit messages without an editor:
git commit -m "$(cat <<'EOF'
feat: add terminal re-attach on panel reopen
Replays the scrollback buffer so reopening the panel restores output.
EOF
)"
Fix the last commit (only if not pushed): git commit --amend --no-edit (add files first) or git commit --amend -m "new message".
Branches
git branch -a # list local + remote branches
git switch -c feature/login # create + switch
git switch main # switch back
git branch -d feature/login # delete merged branch
git push -u origin feature/login # publish and set upstream
Sync with remotes
Prefer the tool: git action=fetch, action=pull, action=push. The shell forms below are for the cases it does not cover - inspecting divergence, listing remotes, pushing tags.
git fetch --all --prune # update remote refs, drop deleted ones
git pull --rebase # update current branch without merge commits
git push # publish commits
git remote -v # list remotes
Diverged from remote? Inspect first: git log --oneline HEAD..origin/main (incoming) and origin/main..HEAD (outgoing).
Merge and rebase
Prefer the tool: action=merge name=…, action=rebase name=…, then step=continue / step=abort / step=skip. It reports which files conflicted instead of leaving you to run status again.
git merge feature/login # merge into current branch
git rebase main # replay current branch onto main
git rebase --abort # bail out of a bad rebase
git merge --abort # bail out of a bad merge
Non-interactive squash of a feature branch onto main:
git switch main && git merge --squash feature/login && git commit -m "feat: login"
Resolve conflicts
- The failing
merge/rebase/pullcall already listed the conflicted paths;git action=statuslists them again. - Open each file; resolve the
<<<<<<</=======/>>>>>>>sections. git action=add paths=[…]for each.- Continue:
git action=rebase step=continue, orgit action=merge step=continue.
Take one side wholesale when appropriate:
git checkout --ours path/file.lock && git add path/file.lock # keep current branch's version
git checkout --theirs path/file.lock && git add path/file.lock # keep incoming version
Stash
git stash push -m "wip: refactor parser" # save dirty tree
git stash list
git stash pop # restore most recent and drop it
git stash apply stash@{1} # restore without dropping
Undo and recover
git restore path/file.py # discard unstaged changes in one file (destructive - confirm first)
git revert <commit> # safe undo: new commit that reverses another
git reset --soft HEAD~1 # uncommit, keep changes staged
git reflog # every position HEAD has been at
git reset --hard HEAD@{2} # jump back to a reflog entry (destructive - confirm first)
Lost commits after a bad reset/rebase are almost always recoverable through git reflog.
History search and bisect
git log -S "functionName" --oneline # commits that added/removed a string
git log --follow --oneline -- path/file.py # history of a file across renames
git bisect start && git bisect bad && git bisect good v1.2.0
# test, then mark: git bisect good | git bisect bad ... until found; finish:
git bisect reset
Cherry-pick, tags, worktrees
git cherry-pick <commit> # copy one commit onto current branch
git tag -a v1.3.0 -m "release 1.3.0" && git push origin v1.3.0
git worktree add ../hotfix-dir hotfix/urgent # second working dir on another branch
git worktree remove ../hotfix-dir
Setup on a fresh machine
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global pull.rebase true
If git commit fails with "Please tell me who you are", run the two identity commands above first.
.gitignore
Add patterns to .gitignore before the files are tracked. To untrack an already-committed file while keeping it on disk:
git rm --cached path/secrets.env && echo "path/secrets.env" >> .gitignore
Signals
- GitHub stars
- 22
- Forks
- 4
- Last commit
- Sep 2026
ahel review
K4blow
destructive-scoped
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Gateway key
git-navinspire-ia- Source
- github.com/navinspire-ia/navin