EasyPlatform git-conflict-resolve

[Git] Resolve git merge/cherry-pick/rebase conflicts with backup, analysis, and reporting

install
source · Clone the upstream repo
git clone https://github.com/duc01226/EasyPlatform
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/duc01226/EasyPlatform "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/git-conflict-resolve" ~/.claude/skills/duc01226-easyplatform-git-conflict-resolve && rm -rf "$T"
manifest: .claude/skills/git-conflict-resolve/SKILL.md
source content

[IMPORTANT] Use

TaskCreate
to break ALL work into small tasks BEFORE starting — including tasks for each file read. This prevents context loss from long files. For simple tasks, AI MUST ATTENTION ask user whether to skip.

<!-- SYNC:critical-thinking-mindset -->

Critical Thinking Mindset — Apply critical thinking, sequential thinking. Every claim needs traced proof, confidence >80% to act. Anti-hallucination: Never present guess as fact — cite sources for every claim, admit uncertainty freely, self-check output for errors, cross-reference independently, stay skeptical of own confidence — certainty without evidence root of all hallucination.

<!-- /SYNC:critical-thinking-mindset --> <!-- SYNC:ai-mistake-prevention -->

AI Mistake Prevention — Failure modes to avoid on every task:

  • Check downstream references before deleting. Deleting components causes documentation and code staleness cascades. Map all referencing files before removal.
  • Verify AI-generated content against actual code. AI hallucinates APIs, class names, and method signatures. Always grep to confirm existence before documenting or referencing.
  • Trace full dependency chain after edits. Changing a definition misses downstream variables and consumers derived from it. Always trace the full chain.
  • Trace ALL code paths when verifying correctness. Confirming code exists is not confirming it executes. Always trace early exits, error branches, and conditional skips — not just happy path.
  • When debugging, ask "whose responsibility?" before fixing. Trace whether bug is in caller (wrong data) or callee (wrong handling). Fix at responsible layer — never patch symptom site.
  • Assume existing values are intentional — ask WHY before changing. Before changing any constant, limit, flag, or pattern: read comments, check git blame, examine surrounding code.
  • Verify ALL affected outputs, not just the first. Changes touching multiple stacks require verifying EVERY output. One green check is not all green checks.
  • Holistic-first debugging — resist nearest-attention trap. When investigating any failure, list EVERY precondition first (config, env vars, DB names, endpoints, DI registrations, data preconditions), then verify each against evidence before forming any code-layer hypothesis.
  • Surgical changes — apply the diff test. Bug fix: every changed line must trace directly to the bug. Don't restyle or improve adjacent code. Enhancement task: implement improvements AND announce them explicitly.
  • Surface ambiguity before coding — don't pick silently. If request has multiple interpretations, present each with effort estimate and ask. Never assume all-records, file-based, or more complex path.
<!-- /SYNC:ai-mistake-prevention -->

Prerequisites: MUST ATTENTION READ before executing:

<!-- SYNC:understand-code-first -->

Understand Code First — HARD-GATE: Do NOT write, plan, or fix until you READ existing code.

  1. Search 3+ similar patterns (
    grep
    /
    glob
    ) — cite
    file:line
    evidence
  2. Read existing files in target area — understand structure, base classes, conventions
  3. Run
    python .claude/scripts/code_graph trace <file> --direction both --json
    when
    .code-graph/graph.db
    exists
  4. Map dependencies via
    connections
    or
    callers_of
    — know what depends on your target
  5. Write investigation to
    .ai/workspace/analysis/
    for non-trivial tasks (3+ files)
  6. Re-read analysis file before implementing — never work from memory alone
  7. NEVER invent new patterns when existing ones work — match exactly or document deviation

BLOCKED until:

- [ ]
Read target files
- [ ]
Grep 3+ patterns
- [ ]
Graph trace (if graph.db exists)
- [ ]
Assumptions verified with evidence

<!-- /SYNC:understand-code-first -->

Quick Summary

Goal: Resolve git merge/cherry-pick/rebase conflicts with backup, analysis, and structured reporting.

Workflow:

  1. Backup — Create safety backup of current state
  2. Analyze — Identify conflict types and affected files
  3. Resolve — Apply resolution strategy per conflict
  4. Report — Generate conflict resolution report

Key Rules:

  • Always create backup before resolving conflicts
  • Prefer preserving both sides' intent over arbitrary choice
  • Generate resolution report for audit trail

Be skeptical. Apply critical thinking, sequential thinking. Every claim needs traced proof, confidence percentages (Idea should be more than 80%).

Purpose

Systematically resolve git conflicts (merge, cherry-pick, rebase) with:

  1. Backup of all conflicted files before resolution
  2. Per-file conflict analysis with root cause explanation
  3. Resolution with documented rationale
  4. Comprehensive report generation

Variables

OPERATION: auto-detect (cherry-pick, merge, rebase) from git state REPORT_PATH:

plans/reports/conflict-resolution-{date}-{operation}-{source}.md
BACKUP_PATH:
.ai/workspace/conflict-backups-{date}/

Workflow

Step 1: Detect conflict state

# Detect operation type
git status  # Check for "cherry-pick in progress", "merge in progress", etc.

# List all conflicted files
git diff --name-only --diff-filter=U  # Unmerged files (both modified)
git status --short | grep "^DU\|^UD\|^UU\|^AA\|^DD"  # All conflict types

Classify each conflict:

  • DU (Deleted by us): File exists on source but not on target branch
  • UD (Deleted by them): File exists on target but deleted by source
  • UU (Both modified): Both branches modified the same file
  • AA (Both added): Both branches added a file at the same path
  • DD (Both deleted): Both branches deleted the file

Step 2: Create backup files

MANDATORY before any resolution.

mkdir -p {BACKUP_PATH}

# For each conflicted file, copy WITH conflict markers preserved
cp <conflicted-file> {BACKUP_PATH}/<filename>.conflict

Create a TaskCreate item for each conflicted file PLUS report and review tasks.

Step 3: Analyze each conflict (per file)

For each conflicted file, perform this analysis:

3a. Understand the conflict type

  • DU/UD (deleted by one side): Check if the file was introduced in a commit not present on the target branch. Read the file content from the source commit to understand what it provides.
  • UU (both modified): Read the conflict markers. Identify what each side changed and why.

3b. Read both versions

# For UU conflicts: read the file with conflict markers
# Look for <<<<<<< HEAD / ======= / >>>>>>> markers

# For DU conflicts: get the source version
git show <source-commit>:<file-path>

# Optionally extract clean versions
git show HEAD:<file-path> > {BACKUP_PATH}/<filename>.ours
git show <source-commit>:<file-path> > {BACKUP_PATH}/<filename>.theirs

3c. Analyze dependencies

  • Check callers: Do other files reference methods/classes in this file? Are caller names compatible?
  • Check constructor/DI: Does the resolution require new dependencies?
  • Check cross-file consistency: Will the resolution break other files?

3d. Determine resolution strategy

Conflict PatternResolution Strategy
DU: File needed by featureAccept theirs (add the file)
DU: File not neededKeep ours (skip the file)
UU: Non-overlapping changesMerge both (keep all changes)
UU: Overlapping, source modifies methods not on targetKeep ours if methods don't exist on target
UU: Overlapping, both modify same methodManual merge with careful analysis
UU: Schema/snapshot filesAccept theirs for new entities, merge for modified

Step 4: Resolve each conflict

Apply the determined strategy:

# Accept theirs (source version)
git checkout --theirs <file> && git add <file>

# Keep ours (target version)
git checkout --ours <file> && git add <file>

# Manual merge: Edit the file to remove conflict markers, then:
git add <file>

For manual merges:

  1. Remove
    <<<<<<< HEAD
    ,
    =======
    ,
    >>>>>>> <commit>
    markers
  2. Keep the correct content from each side
  3. Verify no leftover conflict markers:
    git diff --check

Step 5: Verify resolution

# Check no unmerged files remain
git diff --name-only --diff-filter=U

# Check no leftover conflict markers
git diff --check

# Review overall status
git status

Step 6: Complete the operation

# For cherry-pick
git cherry-pick --continue --no-edit

# For merge
git commit  # (merge commit is auto-prepared)

# For rebase
git rebase --continue

Step 7: Generate report

Create a comprehensive report at

{REPORT_PATH}
with:

  1. Header: Date, source commit/branch, target branch, result commit
  2. Summary: Total conflicts, categories, overall risk
  3. Per-file details:
    • File path
    • Conflict type (DU/UU/etc.)
    • Root cause (why the conflict occurred)
    • Resolution chosen (accept theirs/keep ours/manual merge)
    • Rationale (why this resolution was chosen)
    • Risk level (Low/Medium/High)
  4. Summary table: All files with conflict type, resolution, risk
  5. Root cause analysis: Common patterns across conflicts
  6. Recommendations: Follow-up actions, build verification, etc.

Step 8: Final review

  • Verify report is complete and accurate
  • Check that all backup files exist
  • Confirm build passes (if applicable)
  • Flag any Medium/High risk resolutions for user attention

Resolution Decision Framework

When to "Accept Theirs" (source version)

  • File is NEW (DU) and required by the feature being cherry-picked/merged
  • File contains schema/config additions needed by new entities
  • Source has strictly more content (e.g., empty class → populated class)

When to "Keep Ours" (target version)

  • Source modifies methods that don't exist on target (added by uncommitted prerequisite)
  • Source renames methods/types that target callers still reference by old names
  • Changes are not required for the feature being brought in

When to "Manual Merge"

  • Both sides have legitimate changes that need to coexist
  • Schema files where both add new entries (keep both)
  • Config files where both add new sections

Risk Assessment

RiskCriteriaAction
LowNew file, no existing code affectedProceed
MediumMethod changes, caller compatibility uncertainFlag in report, recommend build verification
HighBreaking changes, cross-service impactRequire user confirmation before proceeding

Notes

  • Always create backup files BEFORE any resolution
  • Never force-resolve without understanding the root cause
  • For complex conflicts (>3 conflict regions in one file), extract both clean versions for side-by-side analysis
  • Check for prerequisite commits: if a cherry-pick modifies files from prior commits not on target, note this in the report
  • Use
    git diff <commit>^..<commit> -- <file>
    to see the actual diff of a specific commit (not the full file state)

Closing Reminders

  • MANDATORY IMPORTANT MUST ATTENTION break work into small todo tasks using
    TaskCreate
    BEFORE starting
  • MANDATORY IMPORTANT MUST ATTENTION search codebase for 3+ similar patterns before creating new code
  • MANDATORY IMPORTANT MUST ATTENTION cite
    file:line
    evidence for every claim (confidence >80% to act)
  • MANDATORY IMPORTANT MUST ATTENTION add a final review todo task to verify work quality <!-- SYNC:understand-code-first:reminder -->
  • MANDATORY IMPORTANT MUST ATTENTION search 3+ existing patterns and read code BEFORE any modification. Run graph trace when graph.db exists. <!-- /SYNC:understand-code-first:reminder --> <!-- SYNC:critical-thinking-mindset:reminder -->
  • MUST ATTENTION apply critical thinking — every claim needs traced proof, confidence >80% to act. Anti-hallucination: never present guess as fact. <!-- /SYNC:critical-thinking-mindset:reminder --> <!-- SYNC:ai-mistake-prevention:reminder -->
  • MUST ATTENTION apply AI mistake prevention — holistic-first debugging, fix at responsible layer, surface ambiguity before coding, re-read files after compaction. <!-- /SYNC:ai-mistake-prevention:reminder -->