| name | Git Environment |
| description | Create development environments with git worktrees, branches, commits, and push to remote. Auto-applies for git workflow tasks. |
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):
git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH
git worktree add -b <branch-name> <worktree-path> $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
git worktree add -b feat/privatelink-karpenter ../hs-privatelink $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
Without worktree (same repo):
git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH
git checkout -b <branch-name> $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
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.
-
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
Push to Remote
First push (set upstream):
git push -u $GIT_FORK_REMOTE <branch-name>
Subsequent pushes:
git push
Force push (after rebase):
git push --force-with-lease
Sync with Upstream
git fetch $GIT_UPSTREAM_REMOTE $GIT_BASE_BRANCH
git rebase $GIT_UPSTREAM_REMOTE/$GIT_BASE_BRANCH
git rebase --continue
git push --force-with-lease
Cleanup Worktree
git worktree remove <worktree-path>
git branch -D <branch-name>
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
source dev/claude-env.sh
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
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
)"
make run-gitlint
git push -u $GIT_FORK_REMOTE feat/aws-privatelink-subnets
gh pr create --title "feat(aws): add dynamic subnet discovery for privatelink" --body "..."
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