| name | git-workflows |
| description | Git version control, branching strategies, and collaboration patterns |
| domain | tools-integrations |
| version | 1.0.0 |
| tags | ["git","github","gitlab","branching","merge","rebase","hooks"] |
| triggers | {"keywords":{"primary":["git","github","gitlab","branch","merge","rebase","commit","pr","pull request"],"secondary":["gitflow","trunk based","cherry pick","stash","hook","conflict"]},"context_boost":["version control","collaboration","code review"],"context_penalty":["database","frontend","ui"],"priority":"high"} |
Git Workflows
Overview
Git version control patterns, branching strategies, and team collaboration best practices.
Branching Strategies
Git Flow
main ─────●────────────●─────────────●───────────
\ / \
\ release/1.0 release/1.1
\ / \ /
develop ──────●───●──────●────●──────●────────────
\ / \ /
feature/ feature/ feature/
login payment search
git flow init
git flow feature start user-authentication
git flow feature finish user-authentication
git flow release start 1.0.0
git flow release finish 1.0.0
git flow hotfix start critical-bug
git flow hotfix finish critical-bug
GitHub Flow (Simplified)
main ─────●──────●──────●──────●──────●───────
\ / \ / \
feature/ feature/ feature/
add-auth fix-bug new-ui
git checkout main
git pull origin main
git checkout -b feature/add-authentication
git add .
git commit -m "feat: add user authentication"
git push -u origin feature/add-authentication
gh pr create --title "Add user authentication" --body "..."
gh pr merge --squash
git checkout main
git pull origin main
git branch -d feature/add-authentication
Trunk-Based Development
main ────●──●──●──●──●──●──●──●──●────
│ │ │
└─────┴────────┴─── short-lived branches (< 1 day)
git checkout main
git pull
git checkout -b fix/typo-in-readme
git commit -m "fix: typo in README"
git push -u origin fix/typo-in-readme
Common Operations
Commits
git add -p
git commit -m "feat(auth): add JWT token validation"
git commit --amend -m "feat(auth): add JWT token validation and refresh"
git commit -m "feat: implement feature
Co-authored-by: Name <email@example.com>"
git commit --allow-empty -m "chore: trigger CI build"
Conventional Commits
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
| Type | Description |
|---|
| feat | New feature |
| fix | Bug fix |
| docs | Documentation only |
| style | Formatting, no code change |
| refactor | Code change, no new feature or fix |
| perf | Performance improvement |
| test | Adding tests |
| chore | Build, CI, tooling |
git commit -m "feat(api): add user registration endpoint"
git commit -m "fix(auth): handle expired token refresh"
git commit -m "docs: update API documentation"
git commit -m "refactor(db): extract connection pool logic"
git commit -m "test(user): add unit tests for validation"
Branching
git checkout -b feature/new-feature
git switch -c feature/new-feature
git branch -a
git branch -vv
git branch -d feature/merged-branch
git branch -D feature/unmerged-branch
git branch -m old-name new-name
git branch --set-upstream-to=origin/main main
Merging
git merge feature/branch
git merge --no-ff feature/branch
git merge --squash feature/branch
git commit -m "feat: add feature (squashed)"
git merge --abort
Rebasing
git fetch origin
git rebase origin/main
git rebase -i HEAD~3
git add .
git rebase --continue
git rebase --abort
Stashing
git stash
git stash push -m "work in progress"
git stash -u
git stash list
git stash pop
git stash apply
git stash apply stash@{2}
git stash show -p stash@{0}
git stash drop stash@{0}
git stash clear
Undoing Changes
git checkout -- file.txt
git restore file.txt
git reset HEAD file.txt
git restore --staged file.txt
git reset --soft HEAD~1
git reset HEAD~1
git reset --mixed HEAD~1
git reset --hard HEAD~1
git revert <commit-hash>
git revert -m 1 <merge-commit-hash>
Git Hooks
Pre-commit Hook
#!/bin/sh
npm run lint
if [ $? -ne 0 ]; then
echo "Linting failed. Please fix errors before committing."
exit 1
fi
npm run type-check
if [ $? -ne 0 ]; then
echo "Type checking failed. Please fix errors before committing."
exit 1
fi
if git diff --cached | grep -E '^\+.*console\.(log|debug|info)' > /dev/null; then
echo "Warning: Found console.log statements. Remove before committing."
exit 1
fi
Husky + lint-staged
{
"scripts": {
"prepare": "husky install"
},
"lint-staged": {
"*.{js,ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.{json,md,yml}": [
"prettier --write"
]
}
}
. "$(dirname "$0")/_/husky.sh"
npx lint-staged
. "$(dirname "$0")/_/husky.sh"
npx --no -- commitlint --edit "$1"
Advanced Operations
Cherry-pick
git cherry-pick <commit-hash>
git cherry-pick <commit1> <commit2> <commit3>
git cherry-pick -n <commit-hash>
git cherry-pick -m 1 <merge-commit-hash>
Bisect (Find Bug Introduction)
git bisect start
git bisect bad
git bisect good v1.0.0
git bisect good
git bisect bad
git bisect reset
git bisect start HEAD v1.0.0
git bisect run npm test
Worktrees
git worktree add ../project-hotfix hotfix/urgent-fix
git worktree add ../project-feature feature/new-feature
git worktree list
git worktree remove ../project-hotfix
Submodules
git submodule add https://github.com/org/repo.git libs/repo
git clone --recurse-submodules https://github.com/org/project.git
git submodule update --init --recursive
git submodule update --remote
Git Configuration
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global core.editor "code --wait"
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"
git config --global alias.unstage "reset HEAD --"
git config --global alias.last "log -1 HEAD"
git config --global pull.rebase true
git config --global push.autoSetupRemote true
git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
Related Skills
- [[devops-cicd]] - CI/CD with Git
- [[code-quality]] - Code review practices
- [[project-management]] - Agile workflows