Get the FREE Ultimate OpenClaw Setup Guide →

git-workflow-mastery

Scanned
npx machina-cli add skill autohandai/community-skills/git-workflow-mastery --openclaw
Files (1)
SKILL.md
4.9 KB

Git Workflow Mastery

Branching Strategies

GitHub Flow (Simple)

main ────●────●────●────●────●────
              \         /
feature        ●───●───●

Best for: Continuous deployment, small teams

Git Flow (Structured)

main    ────●─────────────────●────
             \               /
release       ●─────●───────●
               \   /
develop ────●───●───●───●───●────
             \     /
feature       ●───●

Best for: Scheduled releases, larger teams

Branch Naming

# Feature branches
feature/user-authentication
feature/JIRA-123-add-login

# Bug fixes
fix/login-redirect-loop
fix/JIRA-456-null-pointer

# Releases
release/v1.2.0
release/2024-q1

# Hotfixes
hotfix/security-patch
hotfix/v1.2.1

Commit Messages

Conventional Commits

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

[optional body]

[optional footer(s)]

Types

feat:     # New feature
fix:      # Bug fix
docs:     # Documentation only
style:    # Formatting, no code change
refactor: # Code change without feature/fix
perf:     # Performance improvement
test:     # Adding/updating tests
chore:    # Build process, dependencies
ci:       # CI configuration
revert:   # Revert previous commit

Examples

# Simple
feat(auth): add OAuth2 login support

# With body
fix(api): handle null response from external service

The external payment API occasionally returns null
instead of an error object. Added defensive check.

Fixes #234

# Breaking change
feat(api)!: change response format to JSON:API

BREAKING CHANGE: All API responses now follow JSON:API spec.
Clients need to update their parsers.

Common Operations

Interactive Rebase

# Squash last 3 commits
git rebase -i HEAD~3

# In editor:
pick abc1234 First commit
squash def5678 Second commit
squash ghi9012 Third commit

Cherry Pick

# Apply specific commit to current branch
git cherry-pick abc1234

# Cherry pick range
git cherry-pick abc1234..def5678

Stashing

# Save work in progress
git stash push -m "WIP: feature login"

# List stashes
git stash list

# Apply and remove
git stash pop

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

Undoing Changes

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

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

# Undo a pushed commit (new revert commit)
git revert abc1234

# Discard all local changes
git checkout -- .
git clean -fd

Advanced Techniques

Bisect (Find Bug Introduction)

git bisect start
git bisect bad           # Current commit is broken
git bisect good v1.0.0   # Known good commit

# Git checks out middle commit
# Test and mark:
git bisect good  # or
git bisect bad

# Continue until bug found
git bisect reset

Reflog (Recover Lost Commits)

# View reflog
git reflog

# Recover deleted branch
git checkout -b recovered-branch abc1234

# Undo hard reset
git reset --hard HEAD@{2}

Worktrees (Multiple Working Directories)

# Create worktree for feature branch
git worktree add ../feature-branch feature/new-ui

# List worktrees
git worktree list

# Remove worktree
git worktree remove ../feature-branch

Hooks

Pre-commit Hook

#!/bin/sh
# .git/hooks/pre-commit

# Run linter
npm run lint
if [ $? -ne 0 ]; then
  echo "Lint failed. Commit aborted."
  exit 1
fi

# Run tests
npm test
if [ $? -ne 0 ]; then
  echo "Tests failed. Commit aborted."
  exit 1
fi

Commit-msg Hook

#!/bin/sh
# .git/hooks/commit-msg

# Validate conventional commit format
commit_regex='^(feat|fix|docs|style|refactor|perf|test|chore|ci|revert)(\(.+\))?: .{1,72}'

if ! grep -qE "$commit_regex" "$1"; then
  echo "Invalid commit message format."
  echo "Use: type(scope): description"
  exit 1
fi

Git Aliases

# ~/.gitconfig
[alias]
  co = checkout
  br = branch
  ci = commit
  st = status
  lg = log --oneline --graph --decorate
  undo = reset --soft HEAD~1
  amend = commit --amend --no-edit
  wip = !git add -A && git commit -m 'WIP'
  sync = !git fetch origin && git rebase origin/main

Best Practices

  1. Commit early, commit often - Small, focused commits
  2. Write meaningful commit messages - Explain why, not just what
  3. Keep main/master deployable - Always in working state
  4. Review before merging - Use pull requests
  5. Delete merged branches - Keep repository clean
  6. Never rewrite shared history - No force push to shared branches
  7. Use tags for releases - Semantic versioning

Source

git clone https://github.com/autohandai/community-skills/blob/main/git-workflow-mastery/SKILL.mdView on GitHub

Overview

Master Git workflows with branching models, naming conventions, and commit practices. Learn when to apply GitHub Flow or Git Flow, how to name branches, and how to write Conventional Commits for a clear history. Includes practical examples and commands for everyday use.

How This Skill Works

This skill compiles branching strategies (GitHub Flow, Git Flow), branch naming templates, and conventional commit types. It also covers common operations (rebase, cherry-pick, stash) and advanced techniques (bisect, reflog, worktrees) plus hooks to enforce standards.

When to Use It

  • Launching a new project with continuous deployment needs a simple, fast flow (GitHub Flow).
  • Managing a larger team with scheduled releases benefits from Git Flow.
  • Enforcing consistent history using Conventional Commits for changelogs.
  • Recovering from mistakes or lost commits using Reflog and reset.
  • Implementing pre-commit and commit-msg hooks to preserve code quality.

Quick Start

  1. Step 1: Choose between GitHub Flow or Git Flow for your project.
  2. Step 2: Adopt Conventional Commits and branch naming conventions.
  3. Step 3: Enable and configure pre-commit and commit-msg hooks; practice interactive rebase to squash commits.

Best Practices

  • Choose a branching model that matches team size and release cadence.
  • Use conventional commits with type and scope for clear history.
  • Keep commits small, focused, and well described.
  • Name branches predictably (feature/, fix/, release/, hotfix/).
  • Enable pre-commit and commit-msg hooks to enforce standards.

Example Use Cases

  • feat(auth): add OAuth2 login support
  • fix(api): handle null response from external service
  • feat(api)!: change response format to JSON:API
  • feature/JIRA-123-add-login
  • Pre-commit hook enforces lint and tests before commit

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers