git-workflow-mastery
Scannednpx machina-cli add skill autohandai/community-skills/git-workflow-mastery --openclawFiles (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
- Commit early, commit often - Small, focused commits
- Write meaningful commit messages - Explain why, not just what
- Keep main/master deployable - Always in working state
- Review before merging - Use pull requests
- Delete merged branches - Keep repository clean
- Never rewrite shared history - No force push to shared branches
- 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
- Step 1: Choose between GitHub Flow or Git Flow for your project.
- Step 2: Adopt Conventional Commits and branch naming conventions.
- 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