| name | git-state-validator |
| description | Check git repository status, detect conflicts, and validate branch state before operations. Use when verifying working directory cleanliness, checking for conflicts, or validating branch state. |
Git State Validator
Instructions
When to Invoke This Skill
- Before creating new branches
- Before switching branches
- Before merging or pulling
- After conflicts occur
- When verifying clean working directory
- Before committing changes
Core Validations
- Working Directory Status - Check for uncommitted changes
- Branch Validation - Verify current branch and relationship to main
- Conflict Detection - Identify merge conflicts
- Remote Sync Status - Check if local is ahead/behind remote
- Repository Health - Verify git repository integrity
Standard Workflows
Check Working Directory Status
Get Status
git statusParse Output
- Clean: "nothing to commit, working tree clean"
- Unstaged changes: Modified files not added
- Staged changes: Files added but not committed
- Untracked files: New files not added to git
Get Machine-Readable Status
git status --porcelainPrefixes:
M- ModifiedA- AddedD- Deleted??- UntrackedUU- Merge conflict
Validate Branch State
Get Current Branch
git branch --show-currentCheck if on Main
git branch --show-current | grep -E "^(main|master)$"Get Branch List
git branch -a- Local branches (no prefix)
- Remote branches (remotes/origin/...)
Check Branch Relationship
git merge-base --is-ancestor main HEADExit code 0: Current branch is based on main
Detect Conflicts
Check for Conflict Markers
git diff --checkList Conflicted Files
git diff --name-only --diff-filter=UView Conflict Details
git statusLook for "both modified" or "both added"
Analyze Conflict Markers Search files for:
<<<<<<< HEAD <current changes> ======= <incoming changes> >>>>>>> branch-name
Check Remote Sync Status
Fetch Remote State (without merging)
git fetch originCompare with Remote
git status -sbOutput patterns:
[ahead 3]- Local has 3 commits not pushed[behind 2]- Remote has 2 commits not pulled[ahead 1, behind 2]- Both have unpushed/unpulled commits
View Unpushed Commits
git log origin/main..HEAD --onelineView Unpulled Commits
git log HEAD..origin/main --oneline
Validate Repository Health
Check Repository Integrity
git fsck --fullVerify Object Database
git count-objects -vCheck for Corrupted Objects
git fsck --lost-found
Common Status Interpretations
Clean Working Directory
$ git status
On branch feat/new-feature
nothing to commit, working tree clean
Interpretation: Safe to switch branches, merge, or create new branch
Uncommitted Changes
$ git status
On branch feat/new-feature
Changes not staged for commit:
modified: src/main.py
modified: src/utils.py
Interpretation: Need to commit or stash before branch operations
Merge Conflict
$ git status
On branch feat/new-feature
You have unmerged paths.
Unmerged paths:
both modified: src/config.py
Interpretation: Must resolve conflicts before proceeding
Ahead of Remote
$ git status -sb
## feat/new-feature...origin/feat/new-feature [ahead 3]
Interpretation: Local has 3 commits not pushed to remote
Behind Remote
$ git status -sb
## main...origin/main [behind 5]
Interpretation: Remote has 5 commits not pulled locally
Error Scenarios
Not a Git Repository:
fatal: not a git repository (or any of the parent directories): .git
Action: Navigate to git repository or run git init
Detached HEAD State:
HEAD detached at <commit>
Action: Create branch or checkout existing branch
Corrupted Repository:
error: object file .git/objects/... is empty
Action: Try git fsck, may need to restore from backup
Examples
Example 1: Pre-branch creation validation
Context: About to create new feature branch
Action:
1. Check status: git status
2. Verify on main: git branch --show-current
3. Check for uncommitted changes: git status --porcelain
4. Verify remote sync: git status -sb
Output: "Working directory clean, on main, synced with remote - safe to create branch"
Example 2: Detect merge conflicts
Context: Pull resulted in conflicts
Action:
1. Run git status
2. Identify "both modified" files
3. List conflicted files: git diff --name-only --diff-filter=U
4. For each file, read and identify conflict markers
Output: "3 files have conflicts: src/main.py, src/utils.py, src/config.py"
Example 3: Validate before commit
Context: Ready to commit changes
Action:
1. Check branch: git branch --show-current
2. Verify not on main: Ensure branch name != main/master
3. Review changes: git status
4. View diff: git diff
Output: "On feature branch with 5 modified files - safe to commit"
Example 4: Sync status check
Context: Before pushing changes
Action:
1. Fetch remote: git fetch origin
2. Check status: git status -sb
3. If behind: Suggest pull first
4. If ahead: Confirm ready to push
Output: "Local is ahead by 2 commits - ready to push"