Initial commit
This commit is contained in:
24
.claude-plugin/plugin.json
Normal file
24
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "git",
|
||||
"description": "Git workflow automation with smart commits, conflict resolution, rebase management, worktree creation, and worktree cleanup",
|
||||
"version": "0.18.0",
|
||||
"author": {
|
||||
"name": "Craig Motlin"
|
||||
},
|
||||
"skills": [
|
||||
"./skills/git-workflow/SKILL.md"
|
||||
],
|
||||
"agents": [
|
||||
"./agents/commit-handler.md",
|
||||
"./agents/rebaser.md",
|
||||
"./agents/conflict-resolver.md"
|
||||
],
|
||||
"commands": [
|
||||
"./commands/worktree.md",
|
||||
"./commands/commit.md",
|
||||
"./commands/commit-chunks.md",
|
||||
"./commands/conflicts.md",
|
||||
"./commands/rebase-all.md",
|
||||
"./commands/clean-worktrees.md"
|
||||
]
|
||||
}
|
||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# git
|
||||
|
||||
Git workflow automation with smart commits, conflict resolution, rebase management, worktree creation, and worktree cleanup
|
||||
9
agents/commit-handler.md
Normal file
9
agents/commit-handler.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
name: commit-handler
|
||||
description: Commit local changes to git
|
||||
model: haiku
|
||||
color: red
|
||||
skills: code:cli
|
||||
---
|
||||
|
||||
See [shared/git-commit-instructions.md](../shared/git-commit-instructions.md) for commit context.
|
||||
9
agents/conflict-resolver.md
Normal file
9
agents/conflict-resolver.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
name: conflict-resolver
|
||||
description: Use this agent to handle git merge conflicts
|
||||
model: haiku
|
||||
color: yellow
|
||||
skills: code:cli
|
||||
---
|
||||
|
||||
See [shared/conflict-resolution-instructions.md](../shared/conflict-resolution-instructions.md) for conflict resolution instructions.
|
||||
47
agents/rebaser.md
Normal file
47
agents/rebaser.md
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
name: rebaser
|
||||
description: Use this agent to rebase local commits on top of the upstream remote/branch after committing code to git.\n\n<example>\nContext: The user has just committed code and wants to rebase on upstream changes.\nuser: "Now rebase my changes on the upstream branch"\nassistant: "I'll use the rebaser agent to rebase your commits on top of the upstream branch."\n\n</example>\n\n<example>\nContext: Code has been committed using the commit-handler agent.\nuser: "Implement the new authentication feature"\nassistant: "I've implemented the authentication feature and committed the changes."\n<function call to commit-handler omitted>\nassistant: "Now I'll rebase these changes on the upstream branch to ensure they're up to date."\n<commentary>\nAfter committing, launch the rebaser agent to rebase on upstream.\n</commentary>\n</example>
|
||||
model: haiku
|
||||
color: orange
|
||||
---
|
||||
|
||||
Rebase local git commits on upstream branch.
|
||||
|
||||
You rebase local git commits on top of the upstream remote/branch.
|
||||
|
||||
**Your Primary Responsibilities:**
|
||||
|
||||
1. **Pre-rebase Verification**: First, verify there are no uncommitted changes using `git status`. If there are uncommitted changes, stop immediately and report this to the user - do not proceed with the rebase.
|
||||
|
||||
2. **Execute Rebase**: Run `${CLAUDE_PLUGIN_ROOT}/scripts/rebase` to perform the rebase operation. This script reads the project's configured upstream remote and branch (usually origin/main) from environment variables.
|
||||
|
||||
**CRITICAL**: You MUST use `${CLAUDE_PLUGIN_ROOT}/scripts/rebase`. Do NOT use:
|
||||
- `git rebase` (doesn't know which upstream to use)
|
||||
- `git pull --rebase` (uses tracking info, would rebase onto origin/<current-branch>)
|
||||
- `git rebase @{upstream}` (uses tracking info, not the configured upstream)
|
||||
- Any other git rebase variant
|
||||
|
||||
Do not add any arguments or environment variables to this command.
|
||||
|
||||
3. **Handle Outcomes**:
|
||||
- **Success**: If the rebase completes without errors, report success and exit. Your work is complete.
|
||||
- **Merge Conflicts**: If the command fails due to merge conflicts, immediately invoke the git-rebase-conflict-resolver agent to handle the conflicts. Do not attempt to resolve conflicts yourself.
|
||||
- **Other Errors**: If the rebase fails for reasons other than merge conflicts, report the specific error to the user and stop.
|
||||
|
||||
**Operational Guidelines:**
|
||||
|
||||
- You must execute exactly one rebase attempt per invocation
|
||||
- Do not modify any files or make any commits yourself
|
||||
- Do not attempt to continue or abort rebases manually - the conflict resolver agent handles all conflict resolution workflows
|
||||
- Trust that the rebase script knows how to find the correct upstream
|
||||
- After delegating to the git-rebase-conflict-resolver agent for conflicts, consider your task complete - that agent will handle the entire conflict resolution process
|
||||
|
||||
**Workflow:**
|
||||
|
||||
1. Check `git status` for uncommitted changes
|
||||
2. Execute `${CLAUDE_PLUGIN_ROOT}/scripts/rebase`
|
||||
3. If successful: Report success and exit
|
||||
4. If conflicts: Invoke git-rebase-conflict-resolver agent and exit
|
||||
5. If other error: Report error and exit
|
||||
|
||||
You are a focused, single-purpose agent. Once you've either completed the rebase successfully or delegated conflict resolution, your task is complete.
|
||||
13
commands/clean-worktrees.md
Normal file
13
commands/clean-worktrees.md
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
argument-hint: worktree paths
|
||||
description: Remove git worktrees safely
|
||||
---
|
||||
|
||||
🧹 Remove the following worktrees, as long it is possible to do so without using the `--force` flag.
|
||||
|
||||
$ARGUMENTS
|
||||
|
||||
- Don't bother checking if the repo has changes with `git -C <worktree> status --porcelain`
|
||||
- Don't bother checking for unpushed commits with `git -C <worktree> log`
|
||||
|
||||
Just run `git worktree remove <worktree>` and git will exit with an error code if it's not safe to do so and if `--force` is correctly ommitted.
|
||||
9
commands/commit-chunks.md
Normal file
9
commands/commit-chunks.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
description: Split local changes into multiple logical commits
|
||||
---
|
||||
|
||||
📝 Commit the local changes to git. Analyze my local changes and propose splitting them into multiple logical commits.
|
||||
|
||||
For each proposed commit, show me the message and the list of files. Show all proposals at once. Wait for my confirmation, then commit all.
|
||||
|
||||
See [shared/git-commit-instructions.md](../shared/git-commit-instructions.md) for commit context.
|
||||
5
commands/commit.md
Normal file
5
commands/commit.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
description: Commit local changes to git
|
||||
---
|
||||
|
||||
See [shared/git-commit-instructions.md](../shared/git-commit-instructions.md) for commit context.
|
||||
5
commands/conflicts.md
Normal file
5
commands/conflicts.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
description: Fix all merge conflicts and continue the git rebase
|
||||
---
|
||||
|
||||
See [shared/conflict-resolution-instructions.md](../shared/conflict-resolution-instructions.md) for conflict resolution instructions.
|
||||
20
commands/rebase-all.md
Normal file
20
commands/rebase-all.md
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
description: Rebase all branches onto a configurable upstream branch
|
||||
---
|
||||
|
||||
Keep all branches in a repository up-to-date by rebasing them onto a configurable upstream branch.
|
||||
|
||||
Initial Rebase Attempt: Run `${CLAUDE_PLUGIN_ROOT}/scripts/git-all` to attempt rebasing all branches.
|
||||
|
||||
- If the command fails with merge conflicts, use the `git-rebase-conflict-resolver` agent to resolve all conflicts in the affected branch
|
||||
- After resolving conflicts run `${CLAUDE_PLUGIN_ROOT}/scripts/git-all` again.
|
||||
- Continue this cycle until the command completes successfully without errors or conflicts.
|
||||
|
||||
When communicating:
|
||||
|
||||
- Clearly indicate which branch you're working on.
|
||||
- Summarize the conflicts found.
|
||||
- Report progress after each iteration.
|
||||
- Notify when the entire rebase process is complete.
|
||||
|
||||
Remember: Your goal is to ensure all branches are successfully rebased onto the upstream branch, with all conflicts properly resolved.
|
||||
44
commands/worktree.md
Normal file
44
commands/worktree.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
argument-hint: branch-name
|
||||
description: Create a git worktree in a peer directory
|
||||
---
|
||||
|
||||
Create a git worktree in a peer directory.
|
||||
|
||||
## Arguments
|
||||
|
||||
The argument should be a kebab-case task name (e.g., "auth-feature", "database-migration").
|
||||
|
||||
The user passed in: `$ARGUMENTS`
|
||||
|
||||
If that text is already kebab case, use it directly as the branch name. Otherwise come up with a good kebab-case name based on what the user passed in.
|
||||
|
||||
## Steps
|
||||
|
||||
- Run `bash ${CLAUDE_PLUGIN_ROOT}/scripts/worktree.sh <branch-name>` from the repository root
|
||||
- If the command exits with a non-success exit code, stop here and give a good summary to the user
|
||||
|
||||
## Conclusion
|
||||
|
||||
Run a command to create a new terminal tab in the newly created worktree.
|
||||
|
||||
If we are running in iTerm:
|
||||
|
||||
```console
|
||||
osascript -e 'tell application "iTerm"
|
||||
tell current window
|
||||
create tab with default profile
|
||||
tell current tab
|
||||
tell current session
|
||||
write text "cd <worktree-absolute-path>"
|
||||
end tell
|
||||
end tell
|
||||
end tell
|
||||
end tell'
|
||||
```
|
||||
|
||||
If we are running in xfce4-terminal:
|
||||
|
||||
```console
|
||||
xfce4-terminal --tab --working-directory="<worktree-absolute-path>" -x bash -c "cd <worktree-absolute-path>; exec bash"
|
||||
```
|
||||
81
plugin.lock.json
Normal file
81
plugin.lock.json
Normal file
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||
"pluginId": "gh:motlin/claude-code-plugins:plugins/git",
|
||||
"normalized": {
|
||||
"repo": null,
|
||||
"ref": "refs/tags/v20251128.0",
|
||||
"commit": "2ee0fa2c272f9f7802d184b0f401a3c04722b19b",
|
||||
"treeHash": "8a75099157faa4c9d8deca3733cd174edeaac36e3144a7ece3af3e20253287eb",
|
||||
"generatedAt": "2025-11-28T10:27:09.891915Z",
|
||||
"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": "git",
|
||||
"description": "Git workflow automation with smart commits, conflict resolution, rebase management, worktree creation, and worktree cleanup",
|
||||
"version": "0.18.0"
|
||||
},
|
||||
"content": {
|
||||
"files": [
|
||||
{
|
||||
"path": "README.md",
|
||||
"sha256": "907d0c37ef618b16700e428c94e9bd89c197311c9772b7ab6014feeef92f4988"
|
||||
},
|
||||
{
|
||||
"path": "agents/commit-handler.md",
|
||||
"sha256": "ffd95e4ce8ee98c109325b0c48165108e9ff8733d03683c1c44f8ba2b8d2efde"
|
||||
},
|
||||
{
|
||||
"path": "agents/conflict-resolver.md",
|
||||
"sha256": "491e3e46d07ba766ac2608314fe45c3984b2aed51e867e370440ec865546d18d"
|
||||
},
|
||||
{
|
||||
"path": "agents/rebaser.md",
|
||||
"sha256": "2c95f9bafcdb1c68f8e47aca594711d0a0f19af7e519976e50a44c90a994eba5"
|
||||
},
|
||||
{
|
||||
"path": ".claude-plugin/plugin.json",
|
||||
"sha256": "f5a0ad8aa0a7d875e4031c146e01b16de1efd48c4cbb9f0d83b1deef0fb53cde"
|
||||
},
|
||||
{
|
||||
"path": "commands/worktree.md",
|
||||
"sha256": "478cd3d41cabddbd7ef21e69e4cd33c333ce973f26e7328309242a76e542c739"
|
||||
},
|
||||
{
|
||||
"path": "commands/conflicts.md",
|
||||
"sha256": "ec3ca4cd7797f6fab043318ee14fd89fb7ec033e3a4d4b9c0d43e2edd91ff7df"
|
||||
},
|
||||
{
|
||||
"path": "commands/clean-worktrees.md",
|
||||
"sha256": "26151f58ff8a0e716fe02e7fe34060628a7115dea3dd72a1ce324027d63d64fd"
|
||||
},
|
||||
{
|
||||
"path": "commands/rebase-all.md",
|
||||
"sha256": "aeca10c5f80b06ea6d8335c227f8e2f85ef900eb8bba63ad14bbbc09ec060b11"
|
||||
},
|
||||
{
|
||||
"path": "commands/commit.md",
|
||||
"sha256": "c22786d637e67a63be1da1368e129fe64e8e5f3a87c87d9c2fc08239c26ae4dd"
|
||||
},
|
||||
{
|
||||
"path": "commands/commit-chunks.md",
|
||||
"sha256": "c092bb4dddeeb2c5a9b6dc5afdc10f577875e4e4322ba31a1d0ff44e0d73397b"
|
||||
},
|
||||
{
|
||||
"path": "skills/git-workflow/SKILL.md",
|
||||
"sha256": "ddbfcb4d3745812dfad7f7b3f5218b458bbfc06e2354c4346c5382dcb6f3a5f7"
|
||||
}
|
||||
],
|
||||
"dirSha256": "8a75099157faa4c9d8deca3733cd174edeaac36e3144a7ece3af3e20253287eb"
|
||||
},
|
||||
"security": {
|
||||
"scannedAt": null,
|
||||
"scannerVersion": null,
|
||||
"flags": []
|
||||
}
|
||||
}
|
||||
30
skills/git-workflow/SKILL.md
Normal file
30
skills/git-workflow/SKILL.md
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
name: git-workflow
|
||||
description: Git workflow best practices for commits, rebasing, conflict resolution, and branch management. Use when working with git operations, creating commits, resolving conflicts, or managing branches.
|
||||
---
|
||||
|
||||
# Git Workflow Best Practices
|
||||
|
||||
This skill provides guidelines for git operations including commits, conflict resolution, and branch management.
|
||||
|
||||
## Commit Guidelines
|
||||
|
||||
Use the `/git:commit` command or `git:commit-handler` agent.
|
||||
|
||||
## Splitting Changes into Multiple Commits
|
||||
|
||||
Use the `/git:commit-chunks` command.
|
||||
|
||||
## Conflict Resolution
|
||||
|
||||
Use the `/git:conflicts` command or `git:conflict-resolver` agent.
|
||||
|
||||
## Rebasing All Branches
|
||||
|
||||
Use the `/git:rebase-all` command.
|
||||
|
||||
## Worktree Management
|
||||
|
||||
Use the `/git:worktree` command for creating worktrees.
|
||||
|
||||
Use the `/git:clean-worktrees` command for cleaning up worktrees.
|
||||
Reference in New Issue
Block a user