Files
opencode/skill/git/quick-reference.md
Voson 5a05d5ab53 chore: 重构 OpenCode 命令和技能文档体系
- 新增:统一的 git 命令文档(add/commit/push/pull 等)
- 新增:整合的 Gitea 技能文档(API、运行器、工作流等)
- 新增:工作流模板(Android、Go、Node.js 等)
- 移除:已弃用的旧命令脚本和发布脚本
- 改进:.gitignore 添加敏感文件保护规则
- 改进:AGENTS.md 完善了开发规范和示例

此次重组统一了命令和技能的文档结构,便于后续维护和扩展。
2026-01-13 00:27:21 +08:00

9.9 KiB

Git Quick Reference

Quick reference guide for common Git operations.

File Changes and Status

View Changed Files

# Show working directory status
git status

# Show short status
git status -s

# List changed files only (unstaged)
git diff --name-only

# List changed files only (staged)
git diff --cached --name-only
# or
git diff --staged --name-only

# Show file change statistics
git diff --stat
git diff --cached --stat

View Detailed Changes

# View unstaged changes
git diff

# View staged changes
git diff --cached
# or
git diff --staged

# View specific file changes
git diff <file-path>
git diff --cached <file-path>

# View changes between commits
git diff <commit1>..<commit2>
git diff HEAD~1..HEAD

# View changes between branches
git diff main..feature-branch

Staging and Committing

Add Files to Staging

# Add specific file
git add <file-path>

# Add all files in directory
git add .

# Add all files in repository
git add -A

# Add files interactively
git add -p

# Add only modified files (not new files)
git add -u

Check Staging Area

# List files in staging area
git diff --cached --name-only

# Show detailed staged changes
git diff --cached

Commit Changes

# Simple commit
git commit -m "feat: add user authentication"

# Multi-line commit (macOS/Linux)
git commit -m "$(cat <<'EOF'
feat: add user authentication

- Add OAuth2 support
- Implement JWT tokens
- Add login/logout endpoints
EOF
)"

# Multi-line commit (Windows)
git commit -m "feat: add user authentication" \
  -m "" \
  -m "- Add OAuth2 support" \
  -m "- Implement JWT tokens" \
  -m "- Add login/logout endpoints"

# Commit with automatic staging
git commit -am "fix: resolve issue"

# Amend last commit (before push only!)
git commit --amend -m "new message"

Tag Management

Create Tags

# Create annotated tag
git tag -a "1.2.0" -m "feat: add new feature"

# Create lightweight tag
git tag "1.2.0"

# Create tag with multi-line message
git tag -a "1.2.1" \
  -m "fix: resolve connection issue" \
  -m "" \
  -m "- Increase timeout to 30s" \
  -m "- Add retry mechanism"

# Create tag for specific commit
git tag -a "1.2.0" <commit-hash> -m "message"

# Monorepo tag
git tag -a "ios-1.2.0" -m "feat(ios): add feature"

List Tags

# List all tags
git tag

# List tags with pattern
git tag -l "v1.*"

# List recent tags (sorted)
git tag --list | sort -V | tail -5

# Show tag details
git show <tag-name>

Push Tags

# Push single tag
git push origin <tag-name>

# Push all tags
git push --tags
# or
git push origin --tags

# Push commit and tag together
git push origin main && git push origin 1.2.0

Delete Tags

# Delete local tag
git tag -d <tag-name>

# Delete remote tag
git push origin --delete <tag-name>
# or
git push origin :refs/tags/<tag-name>

# Delete multiple tags
git tag -d tag1 tag2 tag3

Branch Operations

View Branches

# Show current branch
git branch --show-current

# List local branches
git branch

# List all branches (local + remote)
git branch -a

# List remote branches only
git branch -r

# Show branch with last commit
git branch -v

Create and Switch Branches

# Create new branch
git branch <branch-name>

# Create and switch to new branch (old way)
git checkout -b <branch-name>

# Create and switch to new branch (modern)
git switch -c <branch-name>

# Switch to existing branch (old way)
git checkout <branch-name>

# Switch to existing branch (modern)
git switch <branch-name>

# Switch to previous branch
git switch -

Delete Branches

# Delete local branch (safe)
git branch -d <branch-name>

# Delete local branch (force)
git branch -D <branch-name>

# Delete remote branch
git push origin --delete <branch-name>
# or
git push origin :<branch-name>

Pushing and Pulling

Push Changes

# Push current branch
git push

# Push to specific remote and branch
git push origin main

# Push current branch to remote
git push origin $(git branch --show-current)

# Push with upstream tracking
git push -u origin <branch-name>

# Push all branches
git push --all

# Push all tags
git push --tags

# Force push (dangerous!)
git push --force
# Better: force push with lease
git push --force-with-lease

Pull Changes

# Pull from tracked remote
git pull

# Pull from specific remote and branch
git pull origin main

# Pull with rebase
git pull --rebase

# Pull and prune deleted remote branches
git pull --prune

Fetch Changes

# Fetch from all remotes
git fetch

# Fetch from specific remote
git fetch origin

# Fetch and prune deleted remote branches
git fetch --prune

# Fetch all branches and tags
git fetch --all --tags

History and Logs

View Commit History

# View recent commits
git log

# View compact history
git log --oneline

# View recent 10 commits
git log --oneline -10

# View history with graph
git log --graph --oneline --all

# View history with stats
git log --stat

# View history with patches
git log -p

Search History

# Search commits by message
git log --grep="feature"

# Search by author
git log --author="John"

# Search by date
git log --since="2024-01-01"
git log --after="2 weeks ago"
git log --before="yesterday"

# Search by file
git log -- <file-path>

# Search code changes
git log -S "function_name"

View Commit Details

# Show specific commit
git show <commit-hash>

# Show specific tag
git show <tag-name>

# Show HEAD commit
git show HEAD

# Show previous commit
git show HEAD~1
git show HEAD^

Undoing Changes

Discard Changes

# Discard unstaged changes in file
git checkout -- <file-path>
# or (modern)
git restore <file-path>

# Discard all unstaged changes
git checkout -- .
# or (modern)
git restore .

# Unstage file (keep changes)
git reset HEAD <file-path>
# or (modern)
git restore --staged <file-path>

# Unstage all files
git reset HEAD
# or (modern)
git restore --staged .

Reset Commits

# Undo last commit, keep changes staged
git reset --soft HEAD~1

# Undo last commit, keep changes unstaged
git reset HEAD~1
# or
git reset --mixed HEAD~1

# Undo last commit, discard changes (dangerous!)
git reset --hard HEAD~1

# Reset to specific commit
git reset --hard <commit-hash>

Revert Commits

# Create new commit that undoes a commit
git revert <commit-hash>

# Revert without committing
git revert -n <commit-hash>

# Revert multiple commits
git revert <commit1>..<commit2>

Stash Operations

Save Changes

# Stash current changes
git stash

# Stash with message
git stash save "work in progress"

# Stash including untracked files
git stash -u

# Stash including untracked and ignored files
git stash -a

Apply Stash

# Apply most recent stash
git stash apply

# Apply and remove from stash list
git stash pop

# Apply specific stash
git stash apply stash@{2}

Manage Stash

# List all stashes
git stash list

# Show stash changes
git stash show
git stash show -p

# Drop specific stash
git stash drop stash@{1}

# Clear all stashes
git stash clear

Remote Operations

View Remotes

# List remotes
git remote

# List remotes with URLs
git remote -v

# Show remote details
git remote show origin

Manage Remotes

# Add remote
git remote add <name> <url>

# Remove remote
git remote remove <name>

# Rename remote
git remote rename <old-name> <new-name>

# Change remote URL
git remote set-url <name> <new-url>

Configuration

View Configuration

# View all config
git config --list

# View global config
git config --global --list

# View local config
git config --local --list

# View specific config
git config user.name
git config user.email

Set Configuration

# Set user name
git config --global user.name "Your Name"

# Set user email
git config --global user.email "your.email@example.com"

# Set default branch name
git config --global init.defaultBranch main

# Set default editor
git config --global core.editor "code --wait"

# Set credential helper
git config --global credential.helper store

Workflow Examples

Standard Commit and Tag Workflow

# 1. Check status
git status
git diff --cached --name-only

# 2. Stage changes
git add .

# 3. Commit
git commit -m "feat: add user authentication"

# 4. Create tag
git tag -a "1.2.0" -m "feat: add user authentication"

# 5. Push commit and tag
git push origin main
git push origin 1.2.0

Complete Staging to Push Workflow

# Check what files changed
git status

# View changes
git diff

# Stage specific files
git add src/auth.js src/api.js

# Verify staging
git diff --cached --name-only

# Commit with message
git commit -m "feat: implement OAuth2 authentication"

# Push to remote
git push origin main

Push All Tags Workflow

# List local tags
git tag

# View recent tags
git tag --list | sort -V | tail -5

# Push all tags to remote
git push --tags

# Verify tags on remote
git ls-remote --tags origin

Quick Status Check

# Full status
git status

# Changed files only
git diff --name-only
git diff --cached --name-only

# Recent commits and tags
git log --oneline -5
git tag --list | sort -V | tail -5

# Current branch
git branch --show-current

Tips and Tricks

Aliases

Add to ~/.gitconfig:

[alias]
  st = status
  co = checkout
  br = branch
  ci = commit
  unstage = restore --staged
  last = log -1 HEAD
  lg = log --graph --oneline --all
  tags = tag -l --sort=-v:refname

Usage:

git st
git co main
git lg

Useful One-Liners

# Delete all merged branches
git branch --merged | grep -v "\*" | xargs -n 1 git branch -d

# View file in specific commit
git show <commit>:<file-path>

# Count commits by author
git shortlog -sn

# Find when a line was changed
git blame <file-path>

# Show what changed in each commit for a file
git log -p <file-path>

# List files in a commit
git diff-tree --no-commit-id --name-only -r <commit>