Use when pushing, pulling, or merging changes. Handles retries, conflicts, and error recovery.
Scanned 2/12/2026
Install to Claude Code
npx -y skills add changoo89/claude-pilot --skill git-operations --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Git Operations?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/changoo89-git-operations)More formats (shields.io, HTML) on the badges page.
---
name: git-operations
description: Use when pushing, pulling, or merging changes. Handles retries, conflicts, and error recovery.
---
# SKILL: Git Operations
> **Purpose**: Safe push/pull/merge operations with retry logic and error handling
> **Target**: All git operations
---
## Quick Start
### When to Use This Skill
- Pushing changes to remote
- Pulling latest changes
- Merging branches
- Resolving merge conflicts
### Quick Reference
```bash
# Push with retry (3 attempts, 2s delay)
git_push_with_retry() {
local branch="${1:-$(git rev-parse --abbrev-ref HEAD)}"
for attempt in {1..3}; do
git push origin "$branch" 2>&1 && return 0
echo "Retry $attempt/3..." && sleep 2
done
return 1
}
# Pull with fast-forward only
git pull --ff-only || echo "Manual merge required"
```
---
## Core Operations
### Push with Retry
**Purpose**: Handle transient network failures with exponential backoff (3 attempts, 2s/4s/8s delay)
```bash
git_push_with_retry() {
local remote="${1:-origin}"
local branch="${2:-$(git rev-parse --abbrev-ref HEAD)}"
local max_attempts=3
local wait_times=(2 4 8) # Exponential backoff
echo "🔄 Pushing to $remote/$branch..."
for attempt in $(seq 1 $max_attempts); do
# Attempt push
if git push "$remote" "$branch" 2>&1; then
echo "✓ Push successful"
return 0
fi
local exit_code=$?
local error_output="$(git push "$remote" "$branch" 2>&1 || true)"
# Classify error
if echo "$error_output" | grep -qiE "non-fast-forward|rejected|protected"; then
echo "❌ Push rejected (non-fast-forward or protected branch)"
echo " Run: git pull --rebase && git push"
return 1
elif echo "$error_output" | grep -qiE "authentication|permission|credentials"; then
echo "❌ Authentication error"
echo " Check git credentials: git config --list | grep credential"
return 1
fi
# Retry for network/transient errors
if [ $attempt -lt $max_attempts ]; then
local wait_time=${wait_times[$((attempt-1))]}
echo "⚠️ Push failed (attempt $attempt/$max_attempts), retrying in ${wait_time}s..."
sleep "$wait_time"
else
echo "❌ Push failed after $max_attempts attempts"
return 1
fi
done
return 1
}
```
**Error Classification**:
- **Non-retryable** (return 1): non-fast-forward, rejected, protected branch, authentication
- **Retryable** (continue loop): network errors, connection timeout, transient failures
- **No remote** (handled by caller): Remote doesn't exist
**Retry Strategy**:
- Max attempts: 3
- Wait times: 2s, 4s, 8s (exponential backoff)
- Exit on non-retryable errors immediately
### Pull with Safety Checks
**Purpose**: Avoid destructive merges, ensure clean working tree
```bash
git_pull_safe() {
# Check for uncommitted changes
git diff-index --quiet HEAD -- || { echo "Uncommitted changes" >&2; return 1; }
# Fast-forward only
git pull --ff-only || { echo "Manual merge required" >&2; return 1; }
}
```
### Merge with Verification
**Purpose**: Safe branch merging with conflict detection
```bash
git_merge_safe() {
local source="$1"
local target="${2:-$(git rev-parse --abbrev-ref HEAD)}"
git checkout "$target" || return 1
if git merge "$source" --no-ff --no-edit; then
echo "✓ Merged $source into $target"
else
echo "⚠️ Conflicts in:" && git diff --name-only --diff-filter=U
echo "Resolve, then: git add <files> && git commit"
return 1
fi
}
```
---
## Error Handling & Recovery
### Common Errors
| Error | Cause | Solution |
|-------|-------|----------|
| `Failed to connect` | Network issue | Retry with `git_push_with_retry` |
| `rejected (non-fast-forward)` | Remote has new commits | Pull first, then push |
| `conflict` | Branches diverged | Manual merge required |
| `uncommitted changes` | Dirty working tree | Commit or stash first |
### Conflict Resolution
```bash
# After merge conflict
git status # List conflicted files
vim conflicted-file.ts # Resolve markers
git add conflicted-file.ts
git commit
# Abort operations
git merge --abort # Abort merge
git rebase --abort # Abort rebase
git reset --hard HEAD # Reset to safe state
```
### Error Recovery Pattern
```bash
git_operation_with_fallback() {
eval "$1" && return 0
case "$(git status 2>&1)" in
*connection*) return 2 ;; # Retryable
*conflict*) return 3 ;; # Needs intervention
*) return 1 ;; # Fatal
esac
}
```
---
## Related Skills
- **using-git-worktrees**: Parallel development in isolated workspaces
- **git-master**: Comprehensive git workflow mastery
---
**Version**: claude-pilot 4.2.0
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!