| name | git-operations |
| description | Git command patterns, branching strategy, and safety protocols. TRIGGER when: managing branches, resolving merge conflicts, or running commit/merge/push operations. SKIP: worktree lifecycle and isolation recovery (use worktree-management); CI automation (use github-actions-template). |
Git Operations Skill
Purpose
Core git command patterns, branching strategies, and safety protocols for a project.
Current branch: !git branch --show-current 2>/dev/null || true
Branching Convention
| Branch Pattern | Purpose |
|---|
main | Production branch, always stable |
scaffolding/{task_id[:12]} | Worktree task branches (auto-created) |
backup/{task_id[:12]} | Safety backup before destructive ops |
Safe Operation Patterns
Before Any Destructive Operation
git status
git stash list
git log --oneline -5
git branch backup/$(date +%s) HEAD
Merge Strategy
git merge --no-commit --no-ff branch_name
git diff --cached --stat
git merge --continue
Conflict Resolution
git diff --name-only --diff-filter=U
git checkout --ours path/to/file
git checkout --theirs path/to/file
Cherry-Pick
git cherry-pick --no-commit <commit>
git diff --cached --stat
git cherry-pick --continue
Common Error Patterns
| Error | Fix |
|---|
fatal: not a git repository | Verify path, check .git exists |
CONFLICT (content) | Use conflict resolution protocol |
cannot lock ref | Wait and retry, check stale locks |
worktree is not clean | Stage+commit or stash |
Push Operations
Standard Push (after workflow)
git log --oneline origin/main..HEAD
git push origin main
git log --oneline origin/main..HEAD
Push Safety Rules
- NEVER use
--force or --force-with-lease without explicit user confirmation
- Always verify unpushed commits BEFORE push
- Always verify push success AFTER push
- If push fails due to divergence, report to user -- do NOT auto-rebase
Finishing Flow
After work is complete on a branch, execute one of these four actions based on context.
Merge to Main
git checkout main
git merge --ff-only <branch>
git branch -d <branch>
git worktree remove .scaffolding/worktrees/<task_id> 2>/dev/null
git worktree prune
Create PR
git push -u origin <branch>
gh pr create --title "<title>" --body "<body>"
Keep Branch
git push -u origin <branch>
Discard Branch
git checkout main
git worktree remove .scaffolding/worktrees/<task_id> 2>/dev/null
git branch -D <branch>
git worktree prune