# Git Workflow Guide How to manage branches, commits, and pull requests for OpenNoodl development. ## Branch Naming ### Format ``` type/id-short-description ``` ### Types | Type | Use For | Example | |------|---------|---------| | `task` | Task documentation work | `task/001-dependency-updates` | | `feature` | New features | `feature/vercel-deployment` | | `fix` | Bug fixes | `fix/page-router-scroll` | | `refactor` | Code improvements | `refactor/property-panel-hooks` | | `docs` | Documentation only | `docs/api-reference` | | `test` | Test additions | `test/rest-node-coverage` | ### Examples ```bash # Task branches (from dev-docs) git checkout -b task/001-dependency-updates git checkout -b task/002-typescript-cleanup # Feature branches git checkout -b feature/add-oauth-support git checkout -b feature/multi-project-windows # Fix branches git checkout -b fix/nested-router-scroll git checkout -b fix/array-change-tracking # Refactor branches git checkout -b refactor/remove-class-components git checkout -b refactor/data-node-architecture ``` ## Commit Messages ### Format ``` type(scope): short description [optional longer description] [optional footer with references] ``` ### Types - `feat` - New feature - `fix` - Bug fix - `refactor` - Code restructuring (no behavior change) - `docs` - Documentation changes - `test` - Test additions/changes - `chore` - Build/tooling changes - `style` - Formatting (no code change) - `perf` - Performance improvement ### Scopes Use the affected area: - `editor` - Main editor code - `runtime` - Runtime engine - `viewer` - Viewer/preview - `ui` - Core UI components - `build` - Build system - `deps` - Dependencies ### Examples ```bash # Features git commit -m "feat(editor): add connection breakpoints" git commit -m "feat(runtime): implement retry logic for REST node" # Fixes git commit -m "fix(viewer): resolve scroll jumping in nested routers" git commit -m "fix(editor): prevent crash when deleting connected node" # Refactoring git commit -m "refactor(ui): convert PropertyPanel to functional component" git commit -m "refactor(runtime): simplify collection change tracking" # Docs git commit -m "docs(readme): update installation instructions" git commit -m "docs(api): add JSDoc to public methods" # Tests git commit -m "test(runtime): add unit tests for REST node" git commit -m "test(editor): add integration tests for import flow" # Chores git commit -m "chore(deps): update webpack to 5.101.3" git commit -m "chore(build): enable source maps in development" ``` ### Multi-line Commits For complex changes: ```bash git commit -m "feat(editor): add AI-powered node suggestions - Integrate with OpenAI API for code analysis - Add suggestion UI in node picker - Cache suggestions for performance Closes #123" ``` ## Workflow ### Starting Work ```bash # 1. Ensure main is up to date git checkout main git pull origin main # 2. Create your branch git checkout -b task/001-dependency-updates # 3. Make your changes... # 4. Stage and commit frequently git add -A git commit -m "feat(deps): update React to v19" ``` ### During Development ```bash # Check status often git status # View your changes git diff # Stage specific files git add packages/noodl-editor/package.json # Commit logical chunks git commit -m "fix(deps): resolve peer dependency conflicts" # Push to remote (first time) git push -u origin task/001-dependency-updates # Push subsequent commits git push ``` ### Keeping Up to Date ```bash # If main has changed, rebase your work git fetch origin git rebase origin/main # Resolve any conflicts, then continue git add . git rebase --continue # Force push after rebase (your branch only!) git push --force-with-lease ``` ### Creating Pull Request 1. Push your branch to remote 2. Go to GitHub repository 3. Click "New Pull Request" 4. Select your branch 5. Fill in the template: ```markdown ## Summary Brief description of changes ## Task Reference TASK-001: Dependency Updates ## Changes Made - Updated React to v19 - Fixed peer dependency conflicts - Migrated to createRoot API ## Testing - [ ] All existing tests pass - [ ] Manual testing completed - [ ] New tests added (if applicable) ## Checklist - [ ] Code follows style guidelines - [ ] Documentation updated - [ ] CHANGELOG.md updated - [ ] No console.log statements ``` ### After PR Merged ```bash # Switch to main git checkout main # Pull the merged changes git pull origin main # Delete your local branch git branch -d task/001-dependency-updates # Delete remote branch (if not auto-deleted) git push origin --delete task/001-dependency-updates ``` ## Common Scenarios ### Oops, Wrong Branch ```bash # Stash your changes git stash # Switch to correct branch git checkout correct-branch # Apply your changes git stash pop ``` ### Need to Undo Last Commit ```bash # Undo commit but keep changes git reset --soft HEAD~1 # Undo commit and discard changes git reset --hard HEAD~1 ``` ### Need to Update Commit Message ```bash # Most recent commit git commit --amend -m "new message" # Older commit (interactive rebase) git rebase -i HEAD~3 # Change 'pick' to 'reword' for the commit ``` ### Accidentally Committed to Main ```bash # Create a branch with your commits git branch my-feature # Reset main to origin git reset --hard origin/main # Switch to your feature branch git checkout my-feature ``` ### Merge Conflicts ```bash # During rebase or merge, if conflicts occur: # 1. Open conflicted files and resolve # Look for <<<<<<< ======= >>>>>>> markers # 2. Stage resolved files git add resolved-file.ts # 3. Continue the rebase/merge git rebase --continue # or git merge --continue ``` ## Branch Protection The `main` branch has these protections: - Requires pull request - Requires passing CI checks - Requires up-to-date branch - No force pushes allowed ## Tips ### Useful Aliases Add to your `~/.gitconfig`: ```ini [alias] st = status co = checkout br = branch ci = commit lg = log --oneline --graph --all unstage = reset HEAD -- last = log -1 HEAD branches = branch -a ``` ### Before Every PR 1. Run tests: `npm run test:editor` 2. Run type check: `npx tsc --noEmit` 3. Run linter: `npx eslint packages/ --fix` 4. Review your diff: `git diff main` 5. Check commit history: `git log --oneline main..HEAD` ### Good Commit Hygiene - Commit early and often - Each commit should be atomic (one logical change) - Commits should compile and pass tests - Write meaningful commit messages - Don't commit generated files - Don't commit debug code