Git & Version Control
Production Git workflows, branching strategies, and collaborative development practices.
Quick Start
bash
# 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
bash
# 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
bash
# 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
bash
# 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
bash
# 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
bash
#!/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
bash
# ✅ 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:
- • Can use branching and merging effectively
- • Can write conventional commit messages
- • Can resolve merge conflicts
- • Can use interactive rebase
- • Can set up pre-commit hooks