
Git Workflows
- 105 installs
- 19 repo stars
- Updated January 20, 2026
- miles990/claude-software-skills
Standardize branching, commits, rebases, merges, and pull-request hygiene so teams ship changes safely with reviewable, traceable git history.
About
The git-workflows skill teaches disciplined version-control practices for Claude-assisted development, covering branching models, commit conventions, rebases, merges, and pull-request workflows that keep repositories reviewable before shipping.
- Branching and merge strategy conventions
- Commit message and history hygiene
- Pull request preparation and review flow
- Rebase, cherry-pick, and conflict patterns
- Fits CLI and team-based shipping workflows
Git Workflows by the numbers
- 105 all-time installs (skills.sh)
- +1 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #223 of 733 Git & Pull Requests skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/miles990/claude-software-skills --skill git-workflowsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 105 |
|---|---|
| repo stars | ★ 19 |
| Last updated | January 20, 2026 |
| Repository | miles990/claude-software-skills ↗ |
What it does
Standardize branching, commits, rebases, merges, and pull-request hygiene so teams ship changes safely with reviewable, traceable git history.
Files
Git Workflows
Overview
Git version control patterns, branching strategies, and team collaboration best practices.
---
Branching Strategies
Git Flow
main ─────●────────────●─────────────●───────────
\ / \
\ release/1.0 release/1.1
\ / \ /
develop ──────●───●──────●────●──────●────────────
\ / \ /
feature/ feature/ feature/
login payment search# Initialize git flow
git flow init
# Start a new feature
git flow feature start user-authentication
# Work on feature...
git flow feature finish user-authentication
# Start a release
git flow release start 1.0.0
# Bug fixes only...
git flow release finish 1.0.0
# Hotfix for production
git flow hotfix start critical-bug
git flow hotfix finish critical-bugGitHub Flow (Simplified)
main ─────●──────●──────●──────●──────●───────
\ / \ / \
feature/ feature/ feature/
add-auth fix-bug new-ui# 1. Create branch from main
git checkout main
git pull origin main
git checkout -b feature/add-authentication
# 2. Make changes and commit
git add .
git commit -m "feat: add user authentication"
# 3. Push and create PR
git push -u origin feature/add-authentication
gh pr create --title "Add user authentication" --body "..."
# 4. After review, merge via GitHub
gh pr merge --squash
# 5. Delete branch
git checkout main
git pull origin main
git branch -d feature/add-authenticationTrunk-Based Development
main ────●──●──●──●──●──●──●──●──●────
│ │ │
└─────┴────────┴─── short-lived branches (< 1 day)# Small, frequent commits directly to main or via short-lived branches
git checkout main
git pull
git checkout -b fix/typo-in-readme
# Make small change...
git commit -m "fix: typo in README"
git push -u origin fix/typo-in-readme
# PR, review, merge same day---
Common Operations
Commits
# Stage specific changes
git add -p # Interactive staging
# Commit with message
git commit -m "feat(auth): add JWT token validation"
# Amend last commit (not pushed)
git commit --amend -m "feat(auth): add JWT token validation and refresh"
# Commit with co-author
git commit -m "feat: implement feature
Co-authored-by: Name <email@example.com>"
# Empty commit (trigger CI)
git commit --allow-empty -m "chore: trigger CI build"Conventional Commits
<type>(<scope>): <description>
[optional body]
[optional footer(s)]| Type | Description |
|---|---|
| feat | New feature |
| fix | Bug fix |
| docs | Documentation only |
| style | Formatting, no code change |
| refactor | Code change, no new feature or fix |
| perf | Performance improvement |
| test | Adding tests |
| chore | Build, CI, tooling |
# Examples
git commit -m "feat(api): add user registration endpoint"
git commit -m "fix(auth): handle expired token refresh"
git commit -m "docs: update API documentation"
git commit -m "refactor(db): extract connection pool logic"
git commit -m "test(user): add unit tests for validation"Branching
# Create and switch to branch
git checkout -b feature/new-feature
# or
git switch -c feature/new-feature
# List branches
git branch -a # All branches
git branch -vv # With tracking info
# Delete branch
git branch -d feature/merged-branch # Safe delete
git branch -D feature/unmerged-branch # Force delete
# Rename branch
git branch -m old-name new-name
# Set upstream
git branch --set-upstream-to=origin/main mainMerging
# Merge branch into current
git merge feature/branch
# Merge with no fast-forward (always create merge commit)
git merge --no-ff feature/branch
# Squash merge (combine all commits)
git merge --squash feature/branch
git commit -m "feat: add feature (squashed)"
# Abort merge
git merge --abortRebasing
# Rebase current branch onto main
git fetch origin
git rebase origin/main
# Interactive rebase (last 3 commits)
git rebase -i HEAD~3
# In editor, change 'pick' to:
# - squash (s): combine with previous
# - fixup (f): combine, discard message
# - reword (r): change commit message
# - edit (e): stop for amending
# - drop (d): remove commit
# Continue rebase after resolving conflicts
git add .
git rebase --continue
# Abort rebase
git rebase --abortStashing
# Stash changes
git stash
git stash push -m "work in progress"
# Stash including untracked files
git stash -u
# List stashes
git stash list
# Apply stash
git stash pop # Apply and remove
git stash apply # Apply and keep
git stash apply stash@{2} # Apply specific
# Show stash contents
git stash show -p stash@{0}
# Drop stash
git stash drop stash@{0}
git stash clear # Drop all---
Undoing Changes
# Discard changes in working directory
git checkout -- file.txt
git restore file.txt # Git 2.23+
# Unstage file
git reset HEAD file.txt
git restore --staged file.txt # Git 2.23+
# Reset to previous commit (keep changes staged)
git reset --soft HEAD~1
# Reset to previous commit (keep changes unstaged)
git reset HEAD~1
git reset --mixed HEAD~1
# Reset to previous commit (discard changes)
git reset --hard HEAD~1
# Revert a commit (create new commit that undoes)
git revert <commit-hash>
# Revert merge commit
git revert -m 1 <merge-commit-hash>---
Git Hooks
Pre-commit Hook
#!/bin/sh
# .git/hooks/pre-commit
# Run linting
npm run lint
if [ $? -ne 0 ]; then
echo "Linting failed. Please fix errors before committing."
exit 1
fi
# Run type checking
npm run type-check
if [ $? -ne 0 ]; then
echo "Type checking failed. Please fix errors before committing."
exit 1
fi
# Check for console.log
if git diff --cached | grep -E '^\+.*console\.(log|debug|info)' > /dev/null; then
echo "Warning: Found console.log statements. Remove before committing."
exit 1
fiHusky + lint-staged
// package.json
{
"scripts": {
"prepare": "husky install"
},
"lint-staged": {
"*.{js,ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.{json,md,yml}": [
"prettier --write"
]
}
}# .husky/pre-commit
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx lint-staged# .husky/commit-msg
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx --no -- commitlint --edit "$1"---
Advanced Operations
Cherry-pick
# Apply specific commit to current branch
git cherry-pick <commit-hash>
# Cherry-pick multiple commits
git cherry-pick <commit1> <commit2> <commit3>
# Cherry-pick without committing
git cherry-pick -n <commit-hash>
# Cherry-pick merge commit
git cherry-pick -m 1 <merge-commit-hash>Bisect (Find Bug Introduction)
# Start bisect
git bisect start
# Mark current as bad
git bisect bad
# Mark known good commit
git bisect good v1.0.0
# Git checks out middle commit, test and mark
git bisect good # or
git bisect bad
# Repeat until found
# Git reports the first bad commit
# End bisect
git bisect reset
# Automated bisect
git bisect start HEAD v1.0.0
git bisect run npm testWorktrees
# Create worktree for parallel work
git worktree add ../project-hotfix hotfix/urgent-fix
git worktree add ../project-feature feature/new-feature
# List worktrees
git worktree list
# Remove worktree
git worktree remove ../project-hotfixSubmodules
# Add submodule
git submodule add https://github.com/org/repo.git libs/repo
# Clone with submodules
git clone --recurse-submodules https://github.com/org/project.git
# Update submodules
git submodule update --init --recursive
# Pull submodule updates
git submodule update --remote---
Git Configuration
# User config
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
# Default branch
git config --global init.defaultBranch main
# Editor
git config --global core.editor "code --wait"
# Aliases
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"
git config --global alias.unstage "reset HEAD --"
git config --global alias.last "log -1 HEAD"
# Pull behavior
git config --global pull.rebase true
# Auto-setup remote tracking
git config --global push.autoSetupRemote true
# Credential caching
git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'---
Related Skills
- [[devops-cicd]] - CI/CD with Git
- [[code-quality]] - Code review practices
- [[project-management]] - Agile workflows
#!/bin/sh
# Commit message hook: enforce conventional commits
# Usage: cp scripts/commit-msg .git/hooks/commit-msg && chmod +x .git/hooks/commit-msg
commit_msg_file=$1
commit_msg=$(cat "$commit_msg_file")
# Conventional commit pattern
pattern="^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.+\))?: .{1,72}"
if ! echo "$commit_msg" | grep -qE "$pattern"; then
echo "❌ Invalid commit message format!"
echo ""
echo "Expected format: <type>(<scope>): <subject>"
echo ""
echo "Types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert"
echo ""
echo "Examples:"
echo " feat(auth): add login functionality"
echo " fix(api): handle null response"
echo " docs: update README"
echo ""
exit 1
fi
echo "✅ Commit message format valid"
exit 0
#!/bin/sh
# Pre-commit hook: lint and format staged files
# Usage: cp scripts/pre-commit .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit
echo "🔍 Running pre-commit checks..."
# Get staged files
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(js|jsx|ts|tsx)$')
if [ -z "$STAGED_FILES" ]; then
echo "✅ No JS/TS files to check"
exit 0
fi
# Run ESLint
echo "📝 Running ESLint..."
npx eslint $STAGED_FILES --fix
ESLINT_EXIT=$?
# Re-add fixed files
git add $STAGED_FILES
if [ $ESLINT_EXIT -ne 0 ]; then
echo "❌ ESLint failed. Please fix errors before committing."
exit 1
fi
# Run TypeScript check
echo "🔧 Running TypeScript check..."
npx tsc --noEmit
TSC_EXIT=$?
if [ $TSC_EXIT -ne 0 ]; then
echo "❌ TypeScript check failed."
exit 1
fi
echo "✅ Pre-commit checks passed!"
exit 0
#!/bin/bash
# Setup git hooks for this repository
# Usage: ./scripts/setup-hooks.sh
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
HOOKS_DIR="$(git rev-parse --show-toplevel)/.git/hooks"
echo "🔧 Setting up git hooks..."
# Copy hooks
cp "$SCRIPT_DIR/pre-commit" "$HOOKS_DIR/pre-commit"
cp "$SCRIPT_DIR/commit-msg" "$HOOKS_DIR/commit-msg"
# Make executable
chmod +x "$HOOKS_DIR/pre-commit"
chmod +x "$HOOKS_DIR/commit-msg"
echo "✅ Git hooks installed!"
echo ""
echo "Installed hooks:"
echo " - pre-commit: ESLint + TypeScript check"
echo " - commit-msg: Conventional commits validation"
# Node.js .gitignore template
# Usage: cp templates/gitignore-node .gitignore
# Dependencies
node_modules/
.pnp/
.pnp.js
# Build outputs
dist/
build/
.next/
out/
# Cache
.cache/
.turbo/
*.tsbuildinfo
# Environment
.env
.env.local
.env.*.local
# IDE
.idea/
.vscode/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
# Logs
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Test coverage
coverage/
.nyc_output/
# Misc
*.tgz
.vercel
# Python .gitignore template
# Usage: cp templates/gitignore-python .gitignore
# Byte-compiled / optimized
__pycache__/
*.py[cod]
*$py.class
*.so
# Virtual environments
.venv/
venv/
ENV/
env/
# Distribution / packaging
dist/
build/
*.egg-info/
*.egg
# Environment
.env
.env.local
# IDE
.idea/
.vscode/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
# Test / Coverage
.pytest_cache/
.coverage
htmlcov/
.tox/
.nox/
# Jupyter
.ipynb_checkpoints/
# mypy / pyright
.mypy_cache/
.pyright/
# Logs
*.log
Git Workflows Templates
Git hooks and configuration templates.
Scripts (Git Hooks)
| Script | Purpose |
|---|---|
scripts/pre-commit | ESLint + TypeScript check on staged files |
scripts/commit-msg | Conventional commits validation |
scripts/setup-hooks.sh | One-click hooks installation |
Quick Setup
./scripts/setup-hooks.shManual Setup
cp scripts/pre-commit .git/hooks/pre-commit
cp scripts/commit-msg .git/hooks/commit-msg
chmod +x .git/hooks/pre-commit .git/hooks/commit-msgTemplates
| Template | Purpose |
|---|---|
templates/gitignore-node | Node.js/TypeScript projects |
templates/gitignore-python | Python projects |
Usage
cp templates/gitignore-node .gitignore