🔧 Git Hooks = Automation Power
Manual tasks are repetitive. Git hooks automate at Git events. Pre-commit, post-merge, pre-push — automate your workflow.
📝 Available Hooks
# Client-side hooks pre-commit # Before commit prepare-commit-msg # After commit message creation commit-msg # Before commit message final post-commit # After commit pre-rebase # Before rebase post-checkout # After checkout post-merge # After merge pre-push # Before push # Server-side hooks pre-receive # Before receiving push update # Per branch update post-receive # After receiving push # Hook locations .git/hooks/ - pre-commit.sample - commit-msg.sample - etc. # Enable hooks # Remove .sample extension mv .git/hooks/pre-commit.sample .git/hooks/pre-commit
🎯 Pre-commit Hook Examples
# .git/hooks/pre-commit (bash)
#!/bin/sh
# Run linter
echo "Running linter..."
npm run lint
if [ $? -ne 0 ]; then
echo "Linting failed. Fix errors before committing."
exit 1
fi
# Run tests
echo "Running tests..."
npm test
if [ $? -ne 0 ]; then
echo "Tests failed. Fix errors before committing."
exit 1
fi
# Check for debugging code
if grep -n "console.log(" `git diff --cached --name-only`; then
echo "Error: Remove console.log statements before committing"
exit 1
fi
echo "Pre-commit checks passed!"
exit 0
# Pre-commit with Node.js
#!/usr/bin/env node
const { execSync } = require('child_process');
try {
// Run lint-staged
execSync('npx lint-staged', { stdio: 'inherit' });
// Run unit tests
execSync('npm test -- --coverage', { stdio: 'inherit' });
console.log('✅ All checks passed!');
} catch (error) {
console.error('❌ Pre-commit checks failed!');
process.exit(1);
}
💡 Hook Best Practices
- Keep hooks fast (performance)
- Use –no-verify to skip (if needed)
- Share hooks via scripts
- Test hooks carefully
- Use Husky for easier management
“Git hooks automate your workflow. Pre-commit, pre-push, post-merge. Essential for development automation.”
