From git-plugin
Pushes local Git commits to remote repositories, handling branch tracking, upstream setup, safe push patterns like force-with-lease, and verification. Useful after local commits when syncing to remote.
npx claudepluginhub laurigates/claude-plugins --plugin git-pluginThis skill is limited to using the following tools:
Push local commits to remote repositories with proper branch tracking.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Push local commits to remote repositories with proper branch tracking.
Trigger phrases:
Context signals:
git status shows "Your branch is ahead"# Check current branch and tracking
git branch --show-current
git status --porcelain=v2 --branch
# Count commits ahead of remote
git rev-list --count @{upstream}..HEAD 2>/dev/null || echo "no upstream"
# Check remote exists
git remote -v
Has upstream tracking:
# Simple push to tracked branch
git push
No upstream (new branch, same remote branch name):
# Set upstream and push — only use -u when local and remote names match
git push -u origin $(git branch --show-current)
On main, pushing to a differently-named remote branch:
# Use explicit refspec — no -u, preserves main's tracking
git push origin main:<remote-branch>
Force push needed (rebased/amended):
# CAUTION: Only after explicit user confirmation
git push --force-with-lease
# Confirm sync status
git status --porcelain=v2 --branch
# Should show: branch.ab +0 -0 (no commits ahead/behind)
For regular commits on a tracked branch:
git push
When on main with commits to push for a PR, push directly to a remote feature branch without creating a local branch:
# Push main commits to a new remote branch
git push origin main:<remote-branch-name>
# Push specific commit range to a remote branch
git push origin <start>^..<end>:<remote-branch-name>
This avoids local branch juggling. After the PR merges, a git pull on main syncs cleanly.
For branches without upstream, when remote branch name matches local:
git push -u origin $(git branch --show-current)
Warning: -u binds the current local branch's upstream to the named remote branch. If you're on main and want to push to a differently-named feature branch, use the refspec form instead — otherwise main will track the feature branch:
# WRONG while on main — sets main to track origin/feat/foo:
# git push -u origin feat/foo
# CORRECT — push main commits to remote feature branch without changing tracking:
git push origin main:feat/foo
When commits include version tags:
git push --follow-tags
For rebased or amended commits (requires confirmation):
# Safer than --force: fails if remote has new commits
git push --force-with-lease
Before pushing, verify:
branch=$(git branch --show-current)
if [ "$branch" = "main" ] || [ "$branch" = "master" ]; then
# Main-branch development: push to remote feature branch for PRs
# git push origin main:<feature-branch> ← expected workflow
# Direct push to remote main: warn unless explicitly requested
# git push origin main ← requires confirmation
fi
This skill pushes commits only. For full workflows:
| User Intent | Skills Invoked |
|---|---|
| "push" | git-push only |
| "commit and push" | git-commit → git-push |
| "push and create PR" | git-push → git-pr |
| "commit, push, and PR" | git-commit → git-push → git-pr |
| "create PR" (on main) | git-pr handles push + PR creation automatically |
On success, report:
Pushed to origin/feature-branch
Commits pushed: 3
Branch is now up to date with remote
Ready for: create PR, continue working, or merge
No upstream configured:
Branch has no upstream. Setting upstream to origin/<branch>
Remote has diverged:
Push rejected: remote contains commits not in local branch.
Options:
1. Pull and merge: git pull
2. Pull and rebase: git pull --rebase
3. Force push (loses remote commits): git push --force-with-lease
Remote unreachable:
Cannot reach remote 'origin'. Check network connection.
Protected branch rejection:
Push rejected: branch 'main' is protected.
Create a feature branch and submit a pull request instead.
| Scenario | Command |
|---|---|
| Standard push | git push |
| Main to remote feature branch | git push origin main:<branch-name> |
| Commit range to remote branch | git push origin <start>^..<end>:<branch> |
| New branch (same local/remote name) | git push -u origin $(git branch --show-current) |
| With tags | git push --follow-tags |
| After rebase | git push --force-with-lease |
| Check ahead count | git rev-list --count @{upstream}..HEAD |
| Check tracking | git branch -vv |
--force-with-lease