AgentSkillsCN

git

Git 操作,包括提交、分支、工作树以及安全协议。适用于“git”、“commit”、“branch”、“worktree”、“rebase”、“merge”等命令。

SKILL.md
--- frontmatter
name: git
description: "Git operations including commits, branches, worktrees, and safety protocols. Use on 'git', 'commit', 'branch', 'worktree', 'rebase', 'merge'."

Git Skill

Safe, consistent git operations for agents.

Safety Protocol (CRITICAL)

These rules are NON-NEGOTIABLE:

  • Never amend pushed commits - verify with git status showing "Your branch is ahead"
  • Never force push to main/master - warn user if requested
  • Never skip hooks - no --no-verify or --no-gpg-sign
  • Never commit secrets - reject .env, credentials.json, *.key, *.pem
  • Never push automatically - leave pushing to the user. This includes git push AND gh pr create. Creating PRs is equivalent to pushing.
  • Always verify branch state before destructive operations

Conventional Commits

Format: <type>(<scope>): <description>

TypeWhen to Use
featNew feature
fixBug fix
docsDocumentation only
styleFormatting, no code change
refactorCode change, no feature/fix
perfPerformance improvement
testAdding/fixing tests
choreBuild, tooling, deps
ciCI/CD changes
revertReverting previous commit

Rules:

  • Imperative mood, present tense ("add" not "added")
  • First line under 72 characters
  • Scope is optional but helpful: feat(auth): add login endpoint
  • Focus on "why" not "what"

Workflow: Making a Commit

bash
# 1. Check state
git status

# 2. Review changes
git diff                 # unstaged
git diff --cached        # staged

# 3. Stage files (prefer explicit over `git add .`)
git add <specific-files>

# 4. Commit with conventional message
git commit -m "type(scope): description"

# 5. Verify
git log -1
git status

# 6. DO NOT PUSH - leave for user

Workflow: Branching

bash
# Check current branch
git branch --show-current

# Create feature branch
git checkout -b feat/short-description

# Create from specific base
git checkout -b fix/bug-description main

Branch naming conventions:

  • feat/ - new features
  • fix/ - bug fixes
  • chore/ - maintenance
  • refactor/ - code restructuring
  • docs/ - documentation

Rebase vs Merge

Context-dependent - choose based on situation:

Use RebaseUse Merge
Cleaning local commits before PRPreserving branch history
Linear history preferredShared branch with others
Feature branch behind mainMain into feature (public branch)

NEVER rebase pushed commits unless user explicitly requests it (requires force push).

Danger Zone Checklist

Before ANY destructive operation (reset --hard, push --force, rebase -i, commit --amend):

  • Is this a local-only change? (not pushed)
  • Did I verify branch state with git status?
  • Did the user explicitly request this?
  • Is the work recoverable if something goes wrong?

If ANY checkbox is unclear, ask the user first.

Worktree Patterns

Convention: worktrees go in ./tree/ directory.

bash
# List worktrees
git worktree list

# Add worktree for existing branch
git worktree add ./tree/feat-branch feat-branch

# Add worktree with new branch
git worktree add -b fix/new-fix ./tree/fix-new-fix main

# Remove worktree
git worktree remove ./tree/old-branch

# Clean up stale entries
git worktree prune

Amend Rules

Only use git commit --amend when ALL conditions are met:

  1. User explicitly requested amend, OR commit succeeded but pre-commit hook auto-modified files
  2. HEAD commit was created by you in this session (verify: git log -1 --format='%an %ae')
  3. Commit has NOT been pushed to remote (verify: git status shows "Your branch is ahead")

If commit FAILED or was REJECTED by hook - NEVER amend. Fix the issue and create a NEW commit.

Quick Reference

bash
# Status and history
git status
git log --oneline -10
git diff HEAD~1

# Undo last commit (keep changes)
git reset --soft HEAD~1

# Discard unstaged changes (DANGEROUS)
git checkout -- <file>

# Stash work temporarily
git stash
git stash pop

# Check remote state
git fetch --dry-run
git log origin/main..HEAD