Skip to content

GitSim runs Git commands inside a temporary sandbox clone of the user’s repository, analyzes the results, and provides visual feedback including: before/after commit graphs expected file diffs predicted merge conflicts commits that will be rewritten or dropped warnings for destructive changes.

License

Notifications You must be signed in to change notification settings

egekaya1/GitSimulator

Repository files navigation

GitSim - Git Simulation & Visualization Engine

Dry-run dangerous Git commands with visual feedback before executing them.

GitSim is a sophisticated Git simulation tool that lets you preview the exact outcome of complex Git operations—including conflict prediction, safety analysis, and visual before/after graphs—without touching your repository. Think of it as a "flight simulator" for Git commands.

CI PyPI version Downloads Python 3.11+ License: MIT Code style: ruff


🎯 Why GitSim?

The Problem: Git's most powerful commands (rebase, merge, reset, cherry-pick) are also its most dangerous. One wrong move can rewrite history, lose work, or create messy conflicts.

The Solution: GitSim simulates these operations in a safe, read-only environment, showing you:

  • Exact outcome with before/after commit graphs
  • Predicted conflicts with file-level details and certainty levels
  • Safety ratings (LOW/MEDIUM/HIGH/CRITICAL danger levels)
  • Recovery steps if something goes wrong
  • Educational explanations of how Git commands work internally

Perfect for:

  • 🎓 Learning Git - See exactly how operations transform your repository
  • 💼 Complex merges - Preview conflicts before starting a multi-hour merge
  • 🔧 History rewriting - Safely plan rebases on shared branches
  • 👥 Team education - Teach Git workflows with visual demonstrations
  • 🚀 CI/CD safety - Validate Git operations in automation scripts

⚡ Quick Start

# Install from PyPI (v1.0.1)
pipx install gitsimulator

# All three commands work identically:
gitsim rebase main
git-sim rebase main
gitsimulator rebase main

# Preview a merge with conflict detection
gitsim merge feature-branch

# Learn how Git commands work
gitsim explain rebase

# Save repository state for experiments
gitsim snapshot create before-rebase

🎨 Features

🛡️ Core Simulation Commands

gitsim rebase

  • Simulate rebasing branches
  • Predict conflicts per commit
  • Show new commit SHAs
  • Warn about force-push requirements
  • Detailed safety analysis

gitsim merge

  • Preview three-way merges
  • Detect fast-forward opportunities
  • Show merge commit creation
  • File-by-file conflict prediction
  • Merge base analysis

gitsim reset

  • Test --soft, --mixed, --hard modes
  • Preview unreachable commits
  • Working directory impact
  • Staged changes analysis
  • Recovery instructions

gitsim cherry-pick

  • Simulate picking commits
  • Multi-commit support
  • Step-by-step conflict detection
  • Short/full SHA resolution
  • New commit preview

📊 Analysis & Visualization

  • Conflict Detection Engine

    • CERTAIN conflicts: Same lines modified (90%+ accuracy)
    • LIKELY conflicts: Nearby changes within 3 lines
    • POSSIBLE conflicts: Same file modifications
    • File-level granularity with line ranges
  • Safety Analysis System

    • Danger Levels: LOW → MEDIUM → HIGH → CRITICAL
    • Reversibility: Can operation be undone?
    • Force-push Required: Will remote history diverge?
    • Data Loss Risk: Commits becoming unreachable?
    • Recovery Suggestions: Step-by-step undo instructions
  • Visual Commit Graphs

    • ASCII art graphs (matches git log --graph)
    • Before/After comparisons side-by-side
    • Branch topology visualization
    • Highlighted commits and changes
    • Color-coded output with Rich library

🎓 Educational Features

gitsim explain <command> - Interactive learning mode:

  • 📖 Plain-English explanations of Git internals
  • 🔍 Step-by-step algorithm breakdowns
  • ⚠️ Risk assessment and common pitfalls
  • 💡 Best practices and safety tips
  • 🔄 Alternative approaches
  • 🔗 Related commands and references

Supported explanations: rebase, merge, reset, cherry-pick, stash, tag

🔧 Advanced Tools

  • Snapshot System - Save/restore repository states

    • Named snapshots with metadata
    • HEAD position tracking
    • Branch state preservation
    • Timestamped history
    • Quick rollback for experiments
  • Unified Simulator - gitsim sim "any-git-command"

    • Natural syntax parsing
    • All operations supported
    • Consistent output format
  • Plugin Architecture

    • Hook plugins (pre/post/override simulation)
    • Custom simulators
    • Output formatters
    • Entry point discovery
  • Interactive TUI - gitsim tui

    • Textual-powered interface
    • Real-time command preview
    • Headless mode for scripting

📦 Installation

From PyPI (Recommended)

# Install with pipx (v1.0.1)
pipx install gitsimulator

# Or with pip
pip install gitsimulator

Note: All three commands work identically: gitsim, git-sim, and gitsimulator

From Source

git clone https://github.com/egekaya1/GitSimulator.git
cd GitSimulator
pip install -e ".[dev]"

Requirements

  • Python: 3.11, 3.12, or 3.13
  • OS: Linux, macOS, Windows
  • Dependencies:
    • dulwich (Pure Python Git implementation)
    • rich (Terminal formatting)
    • typer (CLI framework)
    • textual (TUI, optional)

💻 Usage Examples

Rebase Simulation

$ gitsim rebase main

Simulating: git rebase main

╭────────── Rebase Summary ───────────╮
│   Source branch       feature       │
│   Target branch       main          │
│   Merge base          abc1234       │
│   Commits to replay   3             │
│   Predicted conflicts 1             │
╰─────────────────────────────────────╯

╭────────── Safety Analysis ──────────╮
│   Danger Level           🔴 HIGH     │
│   Reversible             Yes        │
│   Force Push Required    Yes        │
╰─────────────────────────────────────╯

Before Rebase:
* abc1234 (HEAD -> feature) Add authentication
* def5678 Update config
| * 123abcd (main) Fix security bug
|/
* 789xyz0 Initial commit

After Rebase (Simulated):
* new1234' (HEAD -> feature) Add authentication
* new5678' Update config
* 123abcd (main) Fix security bug
* 789xyz0 Initial commit

⚠️  Found 1 CERTAIN conflict in config.py (lines 45-52)

Recovery: git reflog to restore, git reset --hard ORIG_HEAD

Merge with Conflict Prediction

$ gitsim merge feature-auth

╭─────────── Merge Summary ───────────╮
│  Source branch   feature-auth       │
│  Target branch   main               │
│  Merge type      Three-way          │
│  Files changed   8                  │
│  Conflicts       2 CERTAIN          │
╰─────────────────────────────────────╯

          Potential Conflicts          
┏━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Severity   ┃ File       ┃ Details   ┃
┡━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ CERTAIN    │ auth.py    │ Lines     │
│            │            │ 23-45     │
│ CERTAIN    │ config.yml │ Lines     │
│            │            │ 12-18     │
└────────────┴────────────┴───────────┘

Educational Mode

$ gitsim explain rebase

╭──────────── git rebase ─────────────╮
│ Rebase re-applies commits from one  │
│ branch onto another, creating new   │
│ commits with different SHAs.        │
╰─────────────────────────────────────╯

How it works:
  1. Find merge base (common ancestor)
  2. Save commits to replay
  3. Reset HEAD to target branch
  4. Apply each commit sequentially
  5. Generate new SHAs for all commits

What changes:
  • All rebased commits get new SHAs
  • Commit timestamps updated
  • Linear history (no merge commits)
  • Parent references rewritten

Risks:
  ⚠️ HISTORY REWRITE - Collaborators affected
  ⚠️ FORCE PUSH REQUIRED - Remote diverges
  ⚠️ CONFLICTS - May repeat for each commit
  
Safety tips:
  ✓ Never rebase public/shared branches
  ✓ Create backup: git branch backup-mybranch
  ✓ Use git reflog to recover mistakes

Alternatives:
  • git merge - Preserves history
  • git cherry-pick - Pick specific commits

🏗️ Architecture & Technical Details

System Design

GitSim follows a clean, modular architecture with strict separation of concerns:

┌─────────────────────────────────────────────────────────┐
│                    CLI Layer (Typer)                    │
│  ┌──────────┬──────────┬──────────┬──────────────────┐  │
│  │ Commands │ Options  │ Parsing  │ User Interface   │  │
│  └──────────┴──────────┴──────────┴──────────────────┘  │
└─────────────────────────────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────┐
│              Simulation Dispatcher                      │
│  ┌──────────────────────────────────────────────────┐   │
│  │ • Command routing                                │   │
│  │ • Plugin hook execution (pre/override/post)      │   │
│  │ • Result validation                              │   │
│  └──────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘
                         │
          ┌──────────────┼──────────────┐
          ▼              ▼              ▼
    ┌─────────┐    ┌─────────┐    ┌─────────┐
    │ Rebase  │    │  Merge  │    │  Reset  │
    │Simulator│    │Simulator│    │Simulator│
    └─────────┘    └─────────┘    └─────────┘
          │              │              │
          └──────────────┼──────────────┘
                         ▼
┌─────────────────────────────────────────────────────────┐
│                   Core Services                         │
│  ┌──────────────┬──────────────┬──────────────────┐     │
│  │ Repository   │ Diff         │ Conflict         │     │
│  │ (Dulwich)    │ Analyzer     │ Detector         │     │
│  └──────────────┴──────────────┴──────────────────┘     │
└─────────────────────────────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────┐
│                 Git Repository (.git/)                  │
│              (Read-only access via Dulwich)             │
└─────────────────────────────────────────────────────────┘

Core Components

1. Repository Layer (core/repository.py)

Pure Python Git access via Dulwich - no git binary required:

class Repository:
    """Read-only Git repository wrapper."""
    
    def get_commit(self, ref_or_sha: str) -> CommitInfo:
        """Resolve refs/SHAs to commits (supports short SHAs)."""
    
    def walk_commits(self, include: list[str], exclude: list[str] | None) -> Iterator[CommitInfo]:
        """Topological commit traversal."""
    
    def get_commit_changes(self, sha: str) -> list[FileChange]:
        """Extract file changes from commit."""
    
    def build_graph(self, refs: list[str], max_commits: int) -> CommitGraph:
        """Build DAG representation."""

Key features:

  • Short SHA resolution (7+ characters with ambiguity detection)
  • Relative ref support (HEAD~2, main^)
  • Topological sorting for graph display
  • Lazy loading for performance

2. Simulation Engines (simulation/)

Each simulator implements BaseSimulator[T] protocol:

class BaseSimulator(Protocol[T]):
    def validate(self) -> tuple[list[str], list[str]]:
        """Pre-flight checks → (errors, warnings)."""
    
    def simulate(self) -> T:
        """Execute simulation → typed result."""

Rebase Simulator (simulation/rebase.py):

  • Algorithm: Find merge base → collect commits → replay onto target
  • Conflict detection: Compare each commit's changes against target
  • SHA generation: Deterministic fake SHAs for visualization
  • Step tracking: Detailed operation steps with conflicts

Merge Simulator (simulation/merge.py):

  • Three-way merge analysis (base vs ours vs theirs)
  • Fast-forward detection
  • Merge commit synthesis
  • Conflict accumulation across all files

Reset Simulator (simulation/reset.py):

  • Mode handling: SOFT (staged only), MIXED (unstaged), HARD (discarded)
  • Detached commit tracking
  • Working directory simulation
  • Reflog recovery instructions

Cherry-Pick Simulator (simulation/cherry_pick.py):

  • Sequential commit application
  • Cumulative conflict detection
  • Parent relationship preservation
  • Merge commit warnings

3. Conflict Detection (simulation/conflict_detector.py)

Sophisticated heuristics engine with three certainty levels:

class ConflictDetector:
    def detect_conflicts(
        self,
        our_changes: list[FileChange],
        their_changes: list[FileChange],
    ) -> list[ConflictInfo]:
        """Multi-level conflict analysis."""

Detection Strategy:

  1. CERTAIN (90%+ accuracy):

    • Same file, overlapping line ranges
    • Both sides modify identical lines
    • Binary file conflicts
  2. LIKELY (70%+ accuracy):

    • Changes within 3 lines of each other
    • Same function/class modifications
    • High churn areas
  3. POSSIBLE (50%+ accuracy):

    • Same file modified
    • Different sections
    • Semantic conflicts (imports, etc.)

Algorithm:

for each file changed in OURS:
    if file changed in THEIRS:
        parse diff hunks
        for each hunk_ours:
            for each hunk_theirs:
                if hunks_overlap(hunk_ours, hunk_theirs):
                    → CERTAIN conflict
                elif hunks_nearby(hunk_ours, hunk_theirs, threshold=3):
                    → LIKELY conflict
                else:
                    → POSSIBLE conflict

4. Data Models (core/models.py)

Type-safe data classes (Python 3.11+ dataclasses):

@dataclass
class SimulationResult:
    """Unified result type for all simulations."""
    operation_type: OperationType
    success: bool
    before_graph: CommitGraph
    after_graph: CommitGraph
    conflicts: list[ConflictInfo]
    warnings: list[str]
    safety_info: SafetyInfo
    changed_files: list[FileChange]

@dataclass
class CommitGraph:
    """DAG representation with branch topology."""
    commits: dict[str, CommitInfo]
    edges: list[tuple[str, str]]  # (child, parent)
    branch_tips: dict[str, str]    # branch → SHA
    head_sha: str
    
@dataclass
class ConflictInfo:
    """Detailed conflict information."""
    severity: ConflictSeverity  # CERTAIN | LIKELY | POSSIBLE
    file_path: str
    description: str
    our_lines: tuple[int, int] | None
    their_lines: tuple[int, int] | None

5. Plugin System (plugins/)

Extensible architecture with three plugin types:

class HookPlugin(Plugin):
    """Intercept simulation lifecycle."""
    
    def pre_simulate(self, repo, command, **kwargs) -> dict:
        """Modify inputs before simulation."""
    
    def override_simulation(self, repo, command, **kwargs) -> SimulationResult | None:
        """Replace simulation entirely (or None to continue)."""
    
    def post_simulate(self, repo, command, result) -> SimulationResult:
        """Modify results after simulation."""

class SimulatorPlugin(Plugin):
    """Add new simulation commands."""
    
    def supports(self, command: str) -> bool:
        """Can this plugin handle the command?"""
    
    def simulate(self, **kwargs) -> SimulationResult:
        """Execute custom simulation."""

class FormatterPlugin(Plugin):
    """Custom output formatting."""
    
    def format_result(self, result: SimulationResult) -> str:
        """Render simulation result."""

Discovery: Entry points in pyproject.toml:

[project.entry-points."git_sim.plugins"]
my_plugin = "my_package.plugin:MyPlugin"

Performance Optimizations

  1. Lazy Graph Building: Only load commits needed for visualization
  2. Diff Caching: Memoize expensive diff operations
  3. Short SHA Indexing: Stop at first unique match
  4. Parallel-Safe: Pure functional core, no shared state
  5. Memory Efficient: Stream commits vs loading entire history

Testing Strategy

135 tests covering:

  • Unit tests: Each component in isolation
  • Integration tests: End-to-end command flows
  • Property tests: Invariant checking (graphs are DAGs, etc.)
  • Fixture-based: Multiple repo states (linear, branched, merge commits)
pytest --cov=git_sim --cov-report=html
# Current: 95%+ coverage

🔐 Security & Safety

Read-Only Guarantee

GitSim never writes to your repository:

  • Uses Dulwich's read-only API
  • No git subprocess calls that modify state
  • Simulations run entirely in memory
  • Snapshot system uses separate .git/git-sim-snapshots/ directory

Plugin Safety

  • Plugins run in same process (trust required)
  • Hook plugins can modify simulation behavior
  • Override plugins can replace entire simulations
  • See SECURITY.md for plugin security considerations

📊 Comparison with Alternatives

Feature GitSim git log --graph GitKraken lazygit tig
Simulation ✅ Full ❌ No ❌ No ❌ No ❌ No
Conflict Prediction ✅ 3 levels ❌ No ⚠️ Basic ❌ No ❌ No
Safety Analysis ✅ Yes ❌ No ❌ No ❌ No ❌ No
Educational Mode ✅ Yes ❌ No ❌ No ❌ No ❌ No
Terminal UI ✅ Yes ✅ Yes ❌ GUI only ✅ Yes ✅ Yes
No Git Binary ✅ Pure Python ❌ Requires Git ❌ Requires Git ❌ Requires Git ❌ Requires Git
Snapshot System ✅ Yes ❌ No ⚠️ Via GUI ❌ No ❌ No
Plugin System ✅ Yes ❌ No ✅ Yes ❌ No ❌ No
SSH-Friendly ✅ Yes ✅ Yes ❌ No ✅ Yes ✅ Yes
Price ✅ Free ✅ Free 💰 Paid ✅ Free ✅ Free

GitSim's Unique Value: Only tool combining safe simulation + conflict prediction + education + beautiful CLI.


🛠️ Development

Setup

git clone https://github.com/egekaya1/GitSimulator.git
cd GitSimulator
python -m venv .venv
source .venv/bin/activate  # or `.venv\Scripts\activate` on Windows
pip install -e ".[dev]"

Testing

# Run all tests
pytest

# With coverage
pytest --cov=git_sim --cov-report=html

# Specific test file
pytest tests/test_rebase.py

# Watch mode
pytest-watch

Code Quality

# Type checking
mypy src/git_sim --ignore-missing-imports

# Linting
ruff check src/git_sim tests

# Formatting
ruff format src/git_sim tests

# All checks (what CI runs)
ruff check src/git_sim tests && \
ruff format --check src/git_sim tests && \
mypy src/git_sim --ignore-missing-imports && \
pytest --cov=git_sim

Project Structure

GitSimulator/
├── src/git_sim/           # Source code
│   ├── cli/               # Command-line interface
│   │   ├── main.py        # Typer app entry point
│   │   ├── commands/      # Command implementations
│   │   │   ├── rebase.py
│   │   │   ├── merge.py
│   │   │   └── ...
│   │   └── formatters/    # Output rendering
│   │       ├── graph.py   # Commit graph ASCII art
│   │       ├── conflict.py # Conflict tables
│   │       └── diff.py    # Diff visualization
│   ├── core/              # Core business logic
│   │   ├── repository.py  # Dulwich wrapper
│   │   ├── models.py      # Data classes
│   │   ├── diff_analyzer.py # Diff parsing
│   │   └── exceptions.py  # Custom errors
│   ├── simulation/        # Simulation engines
│   │   ├── base.py        # Abstract base
│   │   ├── dispatcher.py  # Command routing
│   │   ├── rebase.py      # Rebase logic
│   │   ├── merge.py       # Merge logic
│   │   ├── reset.py       # Reset logic
│   │   ├── cherry_pick.py # Cherry-pick logic
│   │   ├── conflict_detector.py # Conflict heuristics
│   │   └── explain.py     # Educational content
│   ├── tui/               # Terminal UI
│   │   └── app.py         # Textual application
│   ├── plugins/           # Plugin system
│   │   ├── base.py        # Plugin protocols
│   │   └── loader.py      # Discovery & loading
│   └── snapshot.py        # State management
├── tests/                 # Test suite (135 tests)
│   ├── conftest.py        # Pytest fixtures
│   ├── test_rebase.py
│   ├── test_merge.py
│   ├── test_conflict_detection.py
│   └── ...
├── .github/workflows/     # CI/CD
│   └── ci.yml             # Automated testing & publishing
├── pyproject.toml         # Package metadata
├── README.md              # This file
├── CHANGELOG.md           # Version history
├── CONTRIBUTING.md        # Development guide
├── SECURITY.md            # Security policy
└── LICENSE.md             # MIT license

📜 License

MIT License - see LICENSE.md


🙏 Acknowledgments

Built with these excellent libraries:

  • Dulwich - Pure Python Git implementation
  • Rich - Beautiful terminal formatting
  • Typer - CLI framework
  • Textual - TUI framework

📞 Support & Contributing


⭐ Star us on GitHub if GitSim helps you!

Installation

# From PyPI (v1.0.1)
pipx install gitsimulator

# Or with pip
pip install gitsimulator

# For development
git clone https://github.com/egekaya1/GitSim.git
cd GitSim
pip install -e .

Note: All three commands work identically: gitsim, git-sim, and gitsimulator

Usage

Simulate a Rebase

git-sim rebase main                     # Simulate rebasing onto main
git-sim rebase main --source feature    # Specify source branch
git-sim rebase main --verbose           # Show detailed conflict info
git-sim rebase main --execute           # Execute after confirmation

Simulate a Merge

git-sim merge feature                   # Simulate merging feature
git-sim merge feature --no-ff           # Force merge commit

Simulate a Reset

git-sim reset HEAD~2 --soft             # Keep changes staged
git-sim reset HEAD~2                    # Unstage changes (mixed)
git-sim reset HEAD~2 --hard             # Discard all changes

Simulate Cherry-Pick

git-sim cherry-pick abc123              # Pick single commit
git-sim cherry-pick abc123 def456       # Pick multiple commits

Unified Simulation Command

git-sim sim "rebase main"
git-sim sim "merge feature"
git-sim sim "reset --hard HEAD~2"
git-sim sim "cherry-pick abc123"

Educational Features

git-sim explain rebase                  # Learn how rebase works
git-sim explain merge                   # Learn how merge works
git-sim explain reset                   # Learn about reset modes
git-sim explain cherry-pick             # Learn about cherry-pick

Snapshot System

git-sim snapshot create "before-rebase" # Save current state
git-sim snapshot list                   # List all snapshots
git-sim snapshot restore "before-rebase"# Restore to snapshot
git-sim snapshot delete "before-rebase" # Delete snapshot

Other Commands

git-sim status                          # Show repository status
git-sim log                             # Show commit graph
git-sim diff HEAD~1                     # Show commit diff

Example Output

Simulating: git rebase main

┌─────────────────────────────────────────┐
│ Rebase Summary                          │
├─────────────────────────────────────────┤
│ Source branch    feature                │
│ Target branch    main                   │
│ Merge base       abc1234                │
│ Commits to replay 3                     │
│ Predicted conflicts 1                   │
└─────────────────────────────────────────┘

┌─────────────────────────────────────────┐
│ Safety Analysis                         │
├─────────────────────────────────────────┤
│ Danger Level     🔴 HIGH                │
│ Reversible       Yes                    │
│ Force Push Required Yes                 │
└─────────────────────────────────────────┘

Before Rebase:
* abc1234 (HEAD -> feature) Add new feature
* def5678 Update config
| * 123abcd (main) Fix bug
|/
* 789xyz0 Initial commit

After Rebase (Simulated):
* new1234 (HEAD -> feature) Add new feature
* new5678 Update config
* 123abcd (main) Fix bug
* 789xyz0 Initial commit

⚠️ Found 1 potential conflict(s)

CERTAIN: Lines 10-15 in 'config.py' modified differently on both sides

Development

pip install -e ".[dev]"                 # Install dev dependencies
pytest                                  # Run tests
pytest --cov=git_sim                    # Run with coverage
mypy src/git_sim --ignore-missing-imports  # Type check
ruff check src/git_sim                  # Lint
ruff format --check src/git_sim         # Format check

Project Structure

git-sim/
├── src/git_sim/
│   ├── cli/                    # CLI commands and formatters
│   │   ├── main.py             # Typer app entry point
│   │   ├── commands/           # Command implementations
│   │   └── formatters/         # Output formatters (graph, diff, conflict)
│   ├── core/                   # Core components
│   │   ├── models.py           # Data models (SimulationResult, CommitGraph, etc.)
│   │   ├── repository.py       # Git repository wrapper (Dulwich)
│   │   ├── diff_analyzer.py    # Diff parsing and analysis
│   │   └── exceptions.py       # Custom exceptions
│   ├── simulation/             # Simulation engines
│   │   ├── dispatcher.py       # Unified command dispatcher
│   │   ├── base.py             # Abstract base simulator
│   │   ├── rebase.py           # Rebase simulation
│   │   ├── merge.py            # Merge simulation
│   │   ├── reset.py            # Reset simulation
│   │   ├── cherry_pick.py      # Cherry-pick simulation
│   │   ├── conflict_detector.py# Conflict detection heuristics
│   │   └── explain.py          # Educational explanations
│   ├── tui/                    # Terminal UI (Textual)
│   │   └── app.py              # Interactive TUI application
│   ├── plugins/                # Plugin system
│   │   ├── base.py             # Plugin base classes
│   │   └── loader.py           # Plugin discovery and loading
│   └── snapshot.py             # Snapshot/restore functionality
├── tests/                      # Test suite
└── .github/workflows/          # CI/CD pipeline

Key Concepts

SimulationResult

All simulators return a unified SimulationResult:

from git_sim.simulation import simulate

result = simulate("rebase", onto="main")
print(result.operation_type)    # OperationType.REBASE
print(result.has_conflicts)     # True/False
print(result.safety_info)       # Safety analysis

Safety Levels

Level Description
LOW Safe, easily reversible
MEDIUM Potentially destructive but recoverable
HIGH History rewrite, force-push risk
CRITICAL Data loss risk

Interactive TUI

git-sim tui                             # Launch interactive terminal UI

Plugin System

git-sim plugin list                     # List available plugins
git-sim plugin new my-plugin            # Generate plugin template
git-sim plugin new my-hook --type hook  # Generate hook plugin
git-sim plugin load my-plugin           # Load a plugin

Roadmap

  • Rebase simulation
  • Merge simulation
  • Reset simulation
  • Cherry-pick simulation
  • Unified dispatcher
  • Safety analysis
  • Educational mode (explain)
  • Snapshot/restore
  • Interactive TUI mode (Textual)
  • Plugin system

License

MIT

About

GitSim runs Git commands inside a temporary sandbox clone of the user’s repository, analyzes the results, and provides visual feedback including: before/after commit graphs expected file diffs predicted merge conflicts commits that will be rewritten or dropped warnings for destructive changes.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages