en un clic
git-environment
// Create development environments with git worktrees, branches, commits, and push to remote. Auto-applies for git workflow tasks.
// Create development environments with git worktrees, branches, commits, and push to remote. Auto-applies for git workflow tasks.
Accesses archived Konflux PipelineRuns, TaskRuns, and pod logs via KubeArchive. Auto-applies when checking Konflux PipelineRun results, investigating enterprise contract failures, or retrieving logs from completed Konflux CI runs.
Build and push control-plane-operator container image. Auto-applies when testing CPO changes that require deploying to a live cluster.
Build and push hypershift-operator container image. Auto-applies when testing HO changes that require deploying to a live cluster.
Create a HyperShift HostedCluster on AWS for development and testing, with optional custom CPO/HO images.
Destroy a HyperShift HostedCluster and all associated AWS infrastructure (VPC, IAM, Route53, etc.).
Provides the ability to run and iterate on HyperShift e2e tests. Auto-applies when implementing features that require e2e validation, fixing e2e test failures, or working on tasks that need live cluster testing.
| name | Git Environment |
| description | Create development environments with git worktrees, branches, commits, and push to remote. Auto-applies for git workflow tasks. |
Automates common git development workflows for HyperShift including worktree creation, branching, committing (with proper format), and pushing to remotes.
Load environment variables from dev/claude-env.sh:
source dev/claude-env.sh
| 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 |
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
Use conventional prefixes:
feat/<description> - New featuresfix/<description> - Bug fixesdocs/<description> - Documentationrefactor/<description> - Code refactoringtest/<description> - Test additionschore/<description> - Maintenance tasksAlways follow the git-commit-format skill for commits.
Stage changes:
git add <specific-files>
Check what's staged:
git status
git diff --cached
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
)"
Validate commit message:
make run-gitlint
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
# 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
# Remove the worktree
git worktree remove <worktree-path>
# Optionally delete the branch
git branch -D <branch-name>
# Prune stale worktree references
git worktree prune
git worktree list
| 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 |
# 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
--force-with-lease instead of --force for safetygit remote -v to verify remote configurationdev/claude-env.sh by setting GIT_FORK_REMOTE