Introduction
Git is the foundation of modern software development. While basic commands get you by, advanced Git skills unlock powerful workflows, enable better collaboration, and make you a more effective team member.
This guide covers advanced Git techniques that professional developers use daily. From branching strategies to history rewriting, you’ll learn patterns that improve your development workflow.
Branching Strategies
How teams organize work.
Git Flow
Classic approach:
- main: Production-ready code
- develop: Integration branch
- feature/: New features
- release/: Release preparation
- hotfix/: Emergency fixes
Structured but heavy.
GitHub Flow
Simpler approach:
- main: Always deployable
- feature/: From main, back to main
- Pull requests: Code review
- Deploy: When ready
- Continuous: Frequent releases
Lightweight.
Trunk-Based Development
Modern approach:
- main: Single source
- Short-lived branches: Hours or days
- Feature flags: Control releases
- Continuous integration: Automated testing
- Direct commits: Sometimes allowed
Fast-paced.
Rebase vs Merge
Understanding the difference.
Merge
Combine branches:
git merge feature/login
Preserves history, creates merge commit.
Rebase
Rewrite history:
git checkout feature/login
git rebase main
Clean linear history.
When to Use Each
Guidelines:
- Merge: Public branches, preserving history
- Rebase: Local cleanup before push
- Never: Rebase shared branches
- Always: Rebase before merging to main
Choose wisely.
Interactive Rebase
Rewrite history intentionally.
Squashing Commits
Combine commits:
git rebase -i HEAD~3
Clean history.
Editing Commits
Amend commits:
- Change messages
- Add files to commits
- Split commits
- Reorder commits
Fix mistakes.
Rebase Best Practices
Safety rules:
- Never rebase public branches
- Force push with caution
- Test after rebase
- Keep commits atomic
- Communicate with team
Be careful.
Advanced Commands
Powerful Git features.
Cherry-Pick
Select commits:
git cherry-pick abc123
Apply specific commits.
Stash
Temporarily save work:
git stash
# ... do something else ...
git stash pop
Quick context switches.
Reflog
Recovery:
git reflog
git checkout HEAD@{2}
Recover lost commits.
Bisect
Find bugs:
git bisect start
git bisect bad
git bisect v1.0
# Test each commit...
git bisect reset
Binary search bugs.
Worktrees
Multiple working directories.
Multiple Checkouts
Work on branches simultaneously:
git worktree add ../project-hotfix hotfix
Parallel development.
Worktree Management
Listing and removing:
git worktree list
git worktree remove ../project-hotfix
Manage workspaces.
Git Hooks
Automation at key points.
Client-Side Hooks
Local automation:
- pre-commit: Before commit
- commit-msg: Message format
- pre-push: Before push
- post-checkout: After checkout
- post-merge: After merge
Automate quality.
Server-Side Hooks
Repository rules:
- pre-receive: Before accepting
- update: Per-branch checks
- post-receive: After accepting
- Enforce policies
- Run tests
Maintain standards.
Aliases
Shortcuts for speed.
Useful Aliases
Common shortcuts:
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.last 'log -1 HEAD'
git config --global alias.unstage 'reset HEAD --'
Save typing.
Advanced Aliases
Power aliases:
git config --global alias.undo 'reset --soft HEAD~1'
git config --global alias.graph 'log --oneline --graph --all'
git config --global alias.week 'log --since="1 week ago"'
Power shortcuts.
Gitignore
Ignoring files.
Patterns
Common patterns:
# Dependencies
node_modules/
# Build outputs
dist/
build/
# Environment
.env
.env.local
# IDE
.vscode/
.idea/
# OS
.DS_Store
Thumbs.db
Ignore properly.
Global Gitignore
System-wide ignore:
git config --global core.excludesFile ~/.gitignore
Every repo.
Collaboration
Team Git workflows.
Pull Requests
Code review process:
- Create descriptive PRs
- Link issues
- Include context
- Respond to feedback
- Keep PRs small
Review-friendly.
Code Reviews
Effective reviews:
- Review promptly
- Be constructive
- Focus on important
- Suggest solutions
- Approve when ready
Improve code.
Conflict Resolution
Handle merge conflicts:
- Understand both sides
- Talk to authors when needed
- Test after resolving
- Commit resolution clearly
Resolve carefully.
Git Security
Protect your repository.
Sensitive Data
Never commit secrets:
- Use .gitignore
- Remove from history if committed
- Use GitHub secrets
- Rotate exposed credentials
Never expose.
Signed Commits
Verify authorship:
git commit -S -m "Signed commit"
git config commit.gpgsign true
Authentic commits.
Advanced Tips
Professional tricks.
Log Analysis
Useful logs:
git log --oneline -10
git log --author="John"
git log --grep="fix"
git log --since="2024-01-01"
Find commits.
Blame
Find changes:
git blame file.txt
git blame -L 10,20 file.txt
Who changed what.
Clean Up
Maintain repository:
- Remove merged branches
- Prune remote tracking
- Garbage collect
- Verify integrity
Regular maintenance.
Conclusion
Git mastery takes time but pays dividends daily. Learn these advanced techniques, practice them in your workflow, and share with your team. Better Git skills make better developers.
Comments