All skills
openshift avatar

/git-env

@cfb745e official
by openshiftopenshift/hypershift543 stars
576

Create development environments with git worktrees, branches, commits, and push to remote. Auto-applies for git workflow tasks.

  • 1 file
  • 5.4 KB
  • Updated 8 months ago
  • GitHub

Use this Skill: https://skilld.dev/gh/openshift/hypershift/git-env

This session only. Nothing lands on disk.

SKILL.md

≈34 tokens always: the name and description. ≈1.3k when used: this file.

Git Development Environment Workflow

Automates common git development workflows for HyperShift including worktree creation, branching, committing (with proper format), and pushing to remotes.

Configuration

Load environment variables from dev/claude-env.sh:

source dev/claude-env.sh

Environment Variables

Variable Default Description
GIT_FORK_REMOTE enxebre Your fork remote name
GIT_UPSTREAM_REMOTE origin Upstream remote (openshift/hypershift)
GIT_BASE_BRANCH main Base branch for new features

Workflows

Create New Development Environment

With worktree (parallel development):

# Fetch latest
git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH

# Create worktree with new branch
git worktree add -b <branch-name> <worktree-path> $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH

# Example:
git worktree add -b feat/privatelink-karpenter ../hs-privatelink $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH

Without worktree (same repo):

# Fetch latest
git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH

# Create and checkout new branch
git checkout -b <branch-name> $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH

# Example:
git checkout -b fix/bug-123 $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH

Branch Naming Conventions

Use conventional prefixes:

  • feat/<description> - New features
  • fix/<description> - Bug fixes
  • docs/<description> - Documentation
  • refactor/<description> - Code refactoring
  • test/<description> - Test additions
  • chore/<description> - Maintenance tasks

Commit Changes

Always follow the git-commit-format skill for commits.

  1. Stage changes:

    git add <specific-files>
  2. Check what's staged:

    git status
    git diff --cached
  3. Commit with proper format:

    git commit -m "$(cat <<'EOF'
    <type>(<scope>): <description>
    
    [optional body]
    
    Signed-off-by: <name> <email>
    Commit-Message-Assisted-by: Claude (via Claude Code)
    EOF
    )"
  4. Validate commit message:

    make run-gitlint

Push to Remote

First push (set upstream):

git push -u $GIT_FORK_REMOTE <branch-name>

Subsequent pushes:

git push

Force push (after rebase):

# Always use --force-with-lease for safety
git push --force-with-lease

Sync with Upstream

# Fetch latest from upstream
git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH

# Rebase current branch on base branch
git rebase $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH

# If conflicts, resolve them, then:
git rebase --continue

# Push updated branch (force required after rebase)
git push --force-with-lease

Cleanup Worktree

# Remove the worktree
git worktree remove <worktree-path>

# Optionally delete the branch
git branch -D <branch-name>

# Prune stale worktree references
git worktree prune

List Worktrees

git worktree list

Quick Reference Commands

Task Command
New worktree + branch git worktree add -b <branch> <path> $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
New branch (no worktree) git checkout -b <branch> $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
Stage all changes git add -A
Stage specific files git add <file1> <file2>
Check status git status
View staged diff git diff --cached
Commit git commit -m "<message>"
Validate commit make run-gitlint
Push (first time) git push -u $GIT_FORK_REMOTE <branch>
Push git push
Force push (safe) git push --force-with-lease
Sync with upstream git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH && git rebase $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
Remove worktree git worktree remove <path>
Delete branch git branch -D <branch>
List worktrees git worktree list

Example Full Workflow

# 0. Load environment
source dev/claude-env.sh

# 1. Create new feature environment
git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH
git worktree add -b feat/aws-privatelink-subnets ../hs-privatelink $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
cd ../hs-privatelink

# 2. Make changes...
# ... edit files ...

# 3. Stage and commit
git add -A
git commit -m "$(cat <<'EOF'
feat(aws): add dynamic subnet discovery for privatelink

Implement subnet discovery from Karpenter EC2NodeClass resources
to ensure PrivateLink VPC Endpoints have ENIs in all required
availability zones.

Signed-off-by: Alberto Garcia <agarcia@redhat.com>
Commit-Message-Assisted-by: Claude (via Claude Code)
EOF
)"

# 4. Validate
make run-gitlint

# 5. Push to fork
git push -u $GIT_FORK_REMOTE feat/aws-privatelink-subnets

# 6. Create PR via gh cli
gh pr create --title "feat(aws): add dynamic subnet discovery for privatelink" --body "..."

# 7. After PR merged, cleanup
cd ../hypershift
git worktree remove ../hs-privatelink
git branch -D feat/aws-privatelink-subnets

Notes

  • Always use --force-with-lease instead of --force for safety
  • Worktrees allow parallel development on multiple features
  • Each worktree shares the same git repository but has its own working directory
  • Run git remote -v to verify remote configuration
  • Configure your fork remote in dev/claude-env.sh by setting GIT_FORK_REMOTE

Source: SKILL.md on GitHub

No third-party reports yet.

Signed by skilld at cfb745e. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated 8 months ago
  • Git/VCS
  • worktree
  • branching
  • commits
  • hypershift
  • openshift
  • conventional-commits
  • fork-workflow

README badge

README badge for openshift/hypershift/git-env

Automates git workflows for HyperShift development including worktree creation, branching with conventional naming, committing with format validation, and pushing to remotes. Targets parallel feature development using git worktrees and requires environment configuration via dev/claude-env.sh.

Generated from the current SKILL.md.

Does this skill work with git worktrees?
Yes. The skill supports both worktree-based parallel development and single-branch workflows. Worktrees let you work on multiple features simultaneously in separate directories.
What commit message format does this skill enforce?
Conventional commits with scope and type (feat, fix, docs, refactor, test, chore), optional body, and Signed-off-by trailers. The skill references the git-commit-format skill for proper formatting and validates with make run-gitlint.
Can I use this with a fork and upstream setup?
Yes. The skill is designed for the HyperShift fork workflow. You configure GIT_FORK_REMOTE and GIT_UPSTREAM_REMOTE in dev/claude-env.sh, then push to your fork and sync against upstream.
What happens if I need to rebase my branch?
The skill supports rebase-and-push workflows using git rebase and git push --force-with-lease (safe force push). If conflicts occur during rebase, you resolve them and run git rebase --continue.

Generated from the current SKILL.md. These answers refresh after source changes.