Skip to content

CLI Commands ​

gitwand resolve ​

Auto-resolve trivial merge conflicts.

bash
gitwand resolve [files...] [options]

Arguments ​

ArgumentDescription
files...File paths to resolve. If omitted, auto-discovers via git diff --name-only --diff-filter=U

Options ​

OptionDescription
--dry-runAnalyze conflicts without writing files
--verboseShow per-hunk details (line number, type, explanation)
--no-whitespaceSkip whitespace-only conflicts
--ciCI mode: JSON output, exit code 1 if unresolved
--jsonAlias for --ci
--resolve-generatedAuto-resolve generated files (lockfiles, dist/) — declined by default: regenerate them instead
--regenerateRe-run the ecosystem's generator (npm/pnpm/yarn-berry/composer/cargo) for declined lockfiles once their source of truth is clean/resolved (sandboxed git worktree, opt-in — see .gitwandrc "regenerate": true)
--concurrency=NParallel file workers (default 8, min 1)
--llm-fallbackEnable LLM fallback for unresolved conflicts (opt-in, experimental)
--llm-provider=XLLM provider: claude (default) | openai | ollama
--llm-model=XModel name (e.g. claude-sonnet-4-6, gpt-4o-mini, llama3)

Examples ​

bash
# Resolve all conflicts in the repo
gitwand resolve

# Dry run with details
gitwand resolve --dry-run --verbose

# Resolve specific files
gitwand resolve src/config.ts package-lock.json

# CI pipeline usage
gitwand resolve --ci || echo "Unresolved conflicts remain"

Exit Codes ​

CodeMeaning
0All conflicts resolved or no conflicts found
1Unresolved conflicts remain (CI mode only)

Human Output ​

✨ GitWand — Git's magic wand

  ✓ src/config.ts          2/2 resolved
  ◐ src/utils.ts           1/3 resolved
  ✗ src/complex.ts         0/1 resolved

  Summary: 3/6 conflict(s) auto-resolved across 3 file(s)
  1 conflict(s) remaining

With --verbose, each hunk shows:

  ✓ src/config.ts          2/2 resolved
    Line 15: one_side_change → resolved (Only one side modified this block)
    Line 42: same_change → resolved (Both sides made identical changes)

CI/JSON Output ​

json
{
  "version": "0.1.0",
  "timestamp": "2026-04-14T12:00:00.000Z",
  "summary": {
    "files": 2,
    "totalConflicts": 5,
    "autoResolved": 4,
    "remaining": 1,
    "allResolved": false
  },
  "files": [
    {
      "path": "src/config.ts",
      "totalConflicts": 2,
      "autoResolved": 2,
      "remaining": 0,
      "validation": {
        "isValid": true,
        "hasResidualMarkers": false,
        "syntaxError": null
      },
      "resolutions": [
        {
          "line": 15,
          "type": "one_side_change",
          "resolved": true,
          "explanation": "Only one side modified this block",
          "confidence": {
            "score": 95,
            "label": "certain",
            "typeClassification": 100,
            "dataRisk": 5,
            "scopeImpact": 10
          },
          "trace": {
            "selected": "theirs",
            "hasBase": true,
            "summary": "One-side change detected — incoming accepted.",
            "steps": ["..."]
          }
        }
      ],
      "pendingHunks": []
    },
    {
      "path": "src/complex.ts",
      "totalConflicts": 3,
      "autoResolved": 2,
      "remaining": 1,
      "validation": {
        "isValid": false,
        "hasResidualMarkers": true,
        "syntaxError": null
      },
      "resolutions": ["..."],
      "pendingHunks": [
        {
          "line": 42,
          "type": "complex",
          "explanation": "Overlapping edits on both sides.",
          "ours": "const timeout = 5000;",
          "theirs": "const timeout = 10000;\nconst retries = 3;",
          "base": "const timeout = 3000;",
          "trace": {
            "selected": null,
            "summary": "Both sides modified — manual resolution required.",
            "steps": ["..."]
          }
        }
      ]
    }
  ]
}

New fields in v1.1:

FieldDescription
validationPost-resolution check: residual markers, syntax errors
confidenceComposite score (0–100) with dimensional breakdown
traceFull DecisionTrace: selected side, base availability, step-by-step reasoning
pendingHunksUnresolved conflicts with ours/theirs/base content for LLM-assisted resolution

gitwand status ​

Show the conflict status for the current repository.

bash
gitwand status

Reports the number of conflicted files, total conflicts, and how many are auto-resolvable.


gitwand conventions ​

Measures this repo's own merge conventions from its historical merges (which side wins version scalars, whether the team regenerates or merges lockfiles, how the changelog is maintained) and writes the verdicts to .git/gitwand/conventions.json — per clone, never committed, always beaten by an explicit .gitwandrc.

Options ​

OptionDescription
--showPrint the currently persisted conventions without re-measuring
--clearDelete the persisted conventions file
--max-merges=NCap on historical merges replayed (default 200)
--jsonMachine-readable output

Example ​

bash
$ gitwand conventions
  measured on 187 merges / 412 conflicted files (engine 3.8.0, 2026-08-27)

  generated files  regenerate  (11 samples, 91 %)
  changelog        tool-rebuilt  (8 samples, 100 %)

✓ written to .git/gitwand/conventions.json (per-clone, never committed; an explicit .gitwandrc always wins)

gitwand --help ​

Show usage information.

bash
gitwand --help

Released under the MIT License.