home / skills / pluginagentmarketplace / custom-plugin-data-engineer / git-version-control
npx playbooks add skill pluginagentmarketplace/custom-plugin-data-engineer --skill git-version-controlReview the files below or copy the command above to add this skill to your agents.
---
name: git-version-control
description: Git workflows, branching strategies, collaboration, and code management
sasmp_version: "1.3.0"
bonded_agent: 03-devops-engineer
bond_type: SECONDARY_BOND
skill_version: "2.0.0"
last_updated: "2025-01"
complexity: foundational
estimated_mastery_hours: 40
prerequisites: []
unlocks: [cicd-pipelines, api-development]
---
# 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 "[email protected]"
# 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
- [Pro Git Book](https://git-scm.com/book/en/v2)
- [Conventional Commits](https://www.conventionalcommits.org/)
- [Git Flight Rules](https://github.com/k88hudson/git-flight-rules)
---
**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