From 5dc5bd27cbd91ca182ac4d506e2ab56c62db06d9 Mon Sep 17 00:00:00 2001 From: Zhongwei Li Date: Sat, 29 Nov 2025 18:14:20 +0800 Subject: [PATCH] Initial commit --- .claude-plugin/plugin.json | 12 ++ README.md | 3 + commands/update-branch-name.md | 258 +++++++++++++++++++++++++++++++++ plugin.lock.json | 45 ++++++ 4 files changed, 318 insertions(+) create mode 100644 .claude-plugin/plugin.json create mode 100644 README.md create mode 100644 commands/update-branch-name.md create mode 100644 plugin.lock.json diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..ba1e43e --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "update-branch-name", + "description": "Updates branch names with proper prefixes and formats, enforcing naming conventions, supporting semantic prefixes, and managing remote branch updates.", + "version": "1.0.0", + "author": { + "name": "ClaudeForge Community", + "url": "https://github.com/claudeforge/marketplace" + }, + "commands": [ + "./commands" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..66e79fc --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# update-branch-name + +Updates branch names with proper prefixes and formats, enforcing naming conventions, supporting semantic prefixes, and managing remote branch updates. diff --git a/commands/update-branch-name.md b/commands/update-branch-name.md new file mode 100644 index 0000000..0baa142 --- /dev/null +++ b/commands/update-branch-name.md @@ -0,0 +1,258 @@ +--- +description: Rename git branches with proper naming conventions and update remote tracking +version: 2.0.0 +--- + +# Branch Name Updater + +Rename git branches following naming conventions and automatically update remote tracking. + +## What It Does + +- Analyzes current branch and changes +- Suggests descriptive branch names +- Renames local and remote branches +- Updates branch tracking +- Enforces naming conventions + +## How to Use + +Run on the branch you want to rename: + +```bash +/update-branch-name +``` + +The command will suggest names based on your changes. + +## Branch Naming Patterns + +**Feature Development** +``` +feature/user-profile-editor +feature/csv-export +feature/oauth-login +``` + +**Bug Fixes** +``` +fix/validation-error +fix/memory-leak +fix/null-pointer +``` + +**Refactoring** +``` +refactor/extract-utils +refactor/database-layer +refactor/api-structure +``` + +**Documentation** +``` +docs/api-documentation +docs/setup-guide +docs/contributing +``` + +## Naming Best Practices + +- Use lowercase letters +- Separate words with hyphens +- Include type prefix (feature, fix, docs, etc.) +- Be descriptive but concise +- Avoid generic names like "updates" or "changes" +- Include issue number if applicable + +## Rename Workflow + +**1. Check Current Branch** +```bash +git branch --show-current +# Output: temp-branch +``` + +**2. Analyze Changes** +```bash +git diff main...HEAD +# Review what you've changed +``` + +**3. Rename Locally** +```bash +git branch -m temp-branch feature/user-authentication +``` + +**4. Update Remote** +```bash +# Delete old remote branch +git push origin --delete temp-branch + +# Push new branch and set upstream +git push -u origin feature/user-authentication +``` + +## Example: Renaming Process + +**Scenario**: Working on search feature, branch named "test" + +**Step 1: Analyze Changes** +```bash +git log main..HEAD --oneline +# Shows commits related to search functionality +``` + +**Step 2: Choose New Name** +``` +Based on changes: feature/fuzzy-search +``` + +**Step 3: Rename** +```bash +git branch -m test feature/fuzzy-search +``` + +**Step 4: Update Remote** +```bash +git push origin --delete test +git push -u origin feature/fuzzy-search +``` + +## Use Cases + +- **Clean Up Naming**: Rename temporary or unclear branch names +- **Enforce Standards**: Apply team naming conventions +- **Clarify Purpose**: Make branch purpose obvious from name +- **Before PR**: Rename before creating pull request +- **Team Collaboration**: Help others understand branch purpose + +## Naming Conventions + +**Type Prefixes** +- `feature/`: New features or functionality +- `fix/`: Bug fixes +- `hotfix/`: Critical production fixes +- `refactor/`: Code restructuring +- `docs/`: Documentation changes +- `test/`: Test additions or updates +- `chore/`: Build/config changes + +**With Issue Numbers** +``` +feature/123-user-dashboard +fix/456-login-error +docs/789-api-guide +``` + +**Team Member Prefix** +``` +alice/feature/search +bob/fix/validation +``` + +## Safety Checks + +Before renaming: + +- [ ] Commit or stash all changes +- [ ] Verify branch is not protected (main/master) +- [ ] Check if others are working on this branch +- [ ] Ensure you have push permissions + +## Common Scenarios + +**Temporary Name to Descriptive** +```bash +# From: temp, test, branch1 +# To: feature/shopping-cart +git branch -m temp feature/shopping-cart +``` + +**Fix Type After Work Changes** +```bash +# Started as feature, became refactor +# From: feature/update-api +# To: refactor/api-structure +git branch -m feature/update-api refactor/api-structure +``` + +**Add Issue Number** +```bash +# From: feature/notifications +# To: feature/234-notifications +git branch -m feature/notifications feature/234-notifications +``` + +## Verification + +After renaming, verify: + +```bash +# Check local branch +git branch --show-current + +# Check remote tracking +git branch -vv + +# Verify remote branch exists +git ls-remote --heads origin +``` + +## Troubleshooting + +**Branch Already Exists**: Choose a different name + +**Push Denied**: Check permissions, might need force push + +**Lost Tracking**: Reset with `git branch --set-upstream-to=origin/new-name` + +**Protected Branch**: Cannot rename main/master/develop + +## Multiple Branches + +Rename multiple branches: + +```bash +# List all branches +git branch + +# Rename each one +git branch -m old-name-1 new-name-1 +git branch -m old-name-2 new-name-2 +``` + +## Working with PRs + +**Before PR Creation**: Rename to descriptive name + +**After PR Created**: Avoid renaming (causes confusion) + +**PR Already Open**: Update PR title/description instead + +## Team Communication + +When renaming shared branches: + +1. Notify team members +2. Ensure no one else is working on it +3. Update any documentation referencing old name +4. Update CI/CD configs if needed + +## Best Practices + +- **Rename Early**: Do it before creating PR +- **Be Descriptive**: Make purpose clear from name +- **Follow Conventions**: Use team's naming standards +- **Update Remote**: Don't forget to update remote branch +- **Communicate**: Tell team about shared branch renames +- **Document**: Note rename in commit or PR if relevant + +## Quality Checklist + +A good branch name: +- [ ] Uses type prefix (feature/fix/docs/etc) +- [ ] Is descriptive of the work +- [ ] Uses lowercase and hyphens +- [ ] Is concise but clear +- [ ] Follows team conventions +- [ ] Includes issue number if applicable diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..93f4ff5 --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,45 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:claudeforge/marketplace:plugins/commands/update-branch-name", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "57dbffa18172f7aad48a064ad7ed3e486e81e9cc", + "treeHash": "d5174d73f51361b9b8ad30eb4d7fb3e3345776419e3d44a22909d0c3de47b20d", + "generatedAt": "2025-11-28T10:15:39.536008Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "update-branch-name", + "description": "Updates branch names with proper prefixes and formats, enforcing naming conventions, supporting semantic prefixes, and managing remote branch updates.", + "version": "1.0.0" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "2a12378f3c2103df1e1318f1c74e37345185c9b108c9d5c22169d3be9599a800" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "1a1699692e26fd2b20125146ff99705f934a9d3a028ea2f91e2efbac43092ad7" + }, + { + "path": "commands/update-branch-name.md", + "sha256": "f4676120d6e97ed6c8fcf978afa5578d9c0857b78480565b11b86bbb16f4ee77" + } + ], + "dirSha256": "d5174d73f51361b9b8ad30eb4d7fb3e3345776419e3d44a22909d0c3de47b20d" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file