Git & Version Control
Production Git workflows, branching strategies, and collaborative development practices.
Quick Start
# Initialize and configure
git init
git config user.name "Developer Name"
git config user.email "dev@company.com"
# Daily workflow
git checkout -b feature/add-data-pipeline
git add .
git commit -m "feat: add ETL pipeline for customer data"
git push -u origin feature/add-data-pipeline
# Create pull request (GitHub CLI)
gh pr create --title "Add ETL pipeline" --body "Implements customer data ETL"
Core Concepts
1. Branching Strategies
# GitFlow
main ──●──────────────────●────────── # Production
│ │
develop ──●──●──●──────●──●──●────────── # Integration
│ \ /
feature/x ●────●──● # Features
│
release/1.0 ───●──── # Release prep
# Trunk-Based Development (recommended for CI/CD)
main ──●──●──●──●──●──●──●──●──────── # Always deployable
│ │ │ │
feature/* ● ● ● ● # Short-lived (1-2 days)
# Commands
git checkout -b feature/new-feature main
git push -u origin feature/new-feature
# After PR approval
git checkout main && git pull
git merge --squash feature/new-feature
git push origin main
git branch -d feature/new-feature
2. Commit Best Practices
# Conventional Commits format
# type(scope): description
git commit -m "feat(etl): add incremental load for orders table"
git commit -m "fix(api): handle null values in response"
git commit -m "docs(readme): update installation instructions"
git commit -m "refactor(pipeline): extract validation logic"
git commit -m "test(unit): add tests for data transformer"
# Types: feat, fix, docs, style, refactor, test, chore, perf
# Interactive rebase for clean history
git rebase -i HEAD~3
# pick -> squash commits, reword messages
# Amend last commit (before push)
git commit --amend -m "Updated message"
3. Resolving Conflicts
# Fetch and rebase (preferred over merge)
git fetch origin
git rebase origin/main
# If conflicts occur
# 1. Edit conflicted files
# 2. Mark as resolved
git add <resolved-files>
git rebase --continue
# Abort if needed
git rebase --abort
# Cherry-pick specific commits
git cherry-pick abc123
# Undo last commit (keep changes)
git reset --soft HEAD~1
# Undo last commit (discard changes)
git reset --hard HEAD~1
4. Advanced Operations
# Stash changes
git stash save "WIP: refactoring"
git stash list
git stash pop # Apply and remove
git stash apply stash@{0} # Apply but keep
# Bisect to find bug
git bisect start
git bisect bad HEAD
git bisect good v1.0.0
# Git checks out commits, you test
git bisect good # or bad
git bisect reset
# Find commits by content
git log -S "function_name" --oneline
git log --grep="fix" --oneline
# Blame to find author
git blame -L 10,20 src/pipeline.py
# Clean untracked files
git clean -fd # Remove untracked files and directories
Git Hooks
#!/bin/bash
# .git/hooks/pre-commit
# Run linting
echo "Running linter..."
ruff check . || exit 1
# Run type checking
echo "Running type check..."
mypy src/ || exit 1
# Run tests
echo "Running tests..."
pytest tests/ -q || exit 1
echo "All checks passed!"
Tools & Technologies
| Tool |
Purpose |
Version (2025) |
| Git |
Version control |
2.43+ |
| GitHub CLI |
GitHub operations |
2.43+ |
| pre-commit |
Git hooks framework |
3.6+ |
| Conventional Commits |
Commit standard |
- |
| GitLens |
VS Code extension |
Latest |
Troubleshooting Guide
| Issue |
Symptoms |
Root Cause |
Fix |
| Merge Conflict |
Can't merge/rebase |
Divergent changes |
Resolve manually, git add, continue |
| Detached HEAD |
Not on any branch |
Checked out commit |
git checkout main |
| Lost Commits |
Commits missing |
Reset/rebase |
git reflog, git cherry-pick |
| Large Repo |
Slow operations |
Large files |
Use Git LFS, clean history |
Best Practices
# ✅ DO: Write meaningful commit messages
git commit -m "fix(etl): handle empty dataframes in transform step
Previously the pipeline would crash when receiving empty data.
Now it logs a warning and continues with the next batch."
# ✅ DO: Keep commits atomic and focused
# ✅ DO: Rebase feature branches before merging
# ✅ DO: Use .gitignore properly
# ❌ DON'T: Commit secrets or credentials
# ❌ DON'T: Force push to shared branches
# ❌ DON'T: Commit large binary files
Resources
Skill Certification Checklist: