refactor: we're breaking out merge-conflicts

This commit is contained in:
Bjarke Sporring
2026-01-15 12:51:43 +01:00
parent ea5cbccc75
commit 7b638d27de
29 changed files with 1385 additions and 1310 deletions

View File

@@ -0,0 +1,348 @@
#!/usr/bin/env pwsh
<#
.SYNOPSIS
Sets up the Module 06 challenge environment for learning git reset.
.DESCRIPTION
This script creates a challenge directory with three branches demonstrating
different reset scenarios:
- soft-reset: Reset with --soft (keeps changes staged)
- mixed-reset: Reset with --mixed (unstages changes)
- hard-reset: Reset with --hard (discards everything) + reflog recovery
#>
Write-Host "`n=== Setting up Module 06: Git Reset Challenge ===" -ForegroundColor Cyan
Write-Host "⚠️ WARNING: Git reset is DANGEROUS - use with extreme caution! ⚠️" -ForegroundColor Red
# Remove existing challenge directory if it exists
if (Test-Path "challenge") {
Write-Host "Removing existing challenge directory..." -ForegroundColor Yellow
Remove-Item -Recurse -Force "challenge"
}
# Create fresh challenge directory
Write-Host "Creating challenge directory..." -ForegroundColor Green
New-Item -ItemType Directory -Path "challenge" | Out-Null
Set-Location "challenge"
# Initialize Git repository
Write-Host "Initializing Git repository..." -ForegroundColor Green
git init | Out-Null
# Configure git for this repository
git config user.name "Workshop Student"
git config user.email "student@example.com"
# ============================================================================
# Create initial commit (shared by all scenarios)
# ============================================================================
$readmeContent = @"
# Git Reset Practice
This repository contains practice scenarios for learning git reset.
"@
Set-Content -Path "README.md" -Value $readmeContent
git add .
git commit -m "Initial commit" | Out-Null
# ============================================================================
# SCENARIO 1: Soft Reset (--soft)
# ============================================================================
Write-Host "`nScenario 1: Creating soft-reset branch..." -ForegroundColor Cyan
# Create soft-reset branch from initial commit
git switch -c soft-reset | Out-Null
# Build up scenario 1 commits
$projectContent = @"
# project.py - Main project file
def initialize():
"""Initialize the project."""
print("Project initialized")
def main():
initialize()
print("Running application...")
"@
Set-Content -Path "project.py" -Value $projectContent
git add .
git commit -m "Initial project setup" | Out-Null
# Good commit: Add feature A
$projectContent = @"
# project.py - Main project file
def initialize():
"""Initialize the project."""
print("Project initialized")
def feature_a():
"""Feature A implementation."""
print("Feature A is working")
def main():
initialize()
feature_a()
print("Running application...")
"@
Set-Content -Path "project.py" -Value $projectContent
git add .
git commit -m "Add feature A" | Out-Null
# Good commit: Add feature B
$projectContent = @"
# project.py - Main project file
def initialize():
"""Initialize the project."""
print("Project initialized")
def feature_a():
"""Feature A implementation."""
print("Feature A is working")
def feature_b():
"""Feature B implementation."""
print("Feature B is working")
def main():
initialize()
feature_a()
feature_b()
print("Running application...")
"@
Set-Content -Path "project.py" -Value $projectContent
git add .
git commit -m "Add feature B" | Out-Null
# BAD commit: Add feature C (wrong implementation)
$projectContent = @"
# project.py - Main project file
def initialize():
"""Initialize the project."""
print("Project initialized")
def feature_a():
"""Feature A implementation."""
print("Feature A is working")
def feature_b():
"""Feature B implementation."""
print("Feature B is working")
def feature_c():
"""Feature C implementation - WRONG!"""
print("Feature C has bugs!") # This needs to be re-implemented
def main():
initialize()
feature_a()
feature_b()
feature_c()
print("Running application...")
"@
Set-Content -Path "project.py" -Value $projectContent
git add .
git commit -m "Add feature C - needs better implementation!" | Out-Null
Write-Host "[CREATED] soft-reset branch with commit to reset --soft" -ForegroundColor Green
# ============================================================================
# SCENARIO 2: Mixed Reset (--mixed, default)
# ============================================================================
Write-Host "`nScenario 2: Creating mixed-reset branch..." -ForegroundColor Cyan
# Switch back to initial commit and create mixed-reset branch
git switch main | Out-Null
git switch -c mixed-reset | Out-Null
# Build up scenario 2 commits
$appContent = @"
# app.py - Application entry point
def start():
"""Start the application."""
print("Application started")
def stop():
"""Stop the application."""
print("Application stopped")
"@
Set-Content -Path "app.py" -Value $appContent
git add .
git commit -m "Add application lifecycle" | Out-Null
# Good commit: Add logging
$appContent = @"
# app.py - Application entry point
def log(message):
"""Log a message."""
print(f"[LOG] {message}")
def start():
"""Start the application."""
log("Application started")
def stop():
"""Stop the application."""
log("Application stopped")
"@
Set-Content -Path "app.py" -Value $appContent
git add .
git commit -m "Add logging system" | Out-Null
# BAD commit 1: Add experimental feature X
$appContent = @"
# app.py - Application entry point
def log(message):
"""Log a message."""
print(f"[LOG] {message}")
def experimental_feature_x():
"""Experimental feature - NOT READY!"""
log("Feature X is experimental and buggy")
def start():
"""Start the application."""
log("Application started")
experimental_feature_x()
def stop():
"""Stop the application."""
log("Application stopped")
"@
Set-Content -Path "app.py" -Value $appContent
git add .
git commit -m "Add experimental feature X - REMOVE THIS!" | Out-Null
# BAD commit 2: Add debug mode (also not ready)
$appContent = @"
# app.py - Application entry point
DEBUG_MODE = True # Should not be committed!
def log(message):
"""Log a message."""
print(f"[LOG] {message}")
def experimental_feature_x():
"""Experimental feature - NOT READY!"""
log("Feature X is experimental and buggy")
def start():
"""Start the application."""
if DEBUG_MODE:
log("DEBUG MODE ACTIVE!")
log("Application started")
experimental_feature_x()
def stop():
"""Stop the application."""
log("Application stopped")
"@
Set-Content -Path "app.py" -Value $appContent
git add .
git commit -m "Add debug mode - REMOVE THIS TOO!" | Out-Null
Write-Host "[CREATED] mixed-reset branch with commits to reset --mixed" -ForegroundColor Green
# ============================================================================
# SCENARIO 3: Hard Reset (--hard) + Reflog Recovery
# ============================================================================
Write-Host "`nScenario 3: Creating hard-reset branch..." -ForegroundColor Cyan
# Switch back to main and create hard-reset branch
git switch main | Out-Null
git switch -c hard-reset | Out-Null
# Reset to basic state
$utilsContent = @"
# utils.py - Utility functions
def helper_a():
"""Helper function A."""
return "Helper A"
def helper_b():
"""Helper function B."""
return "Helper B"
"@
Set-Content -Path "utils.py" -Value $utilsContent
git add .
git commit -m "Add utility helpers" | Out-Null
# Good commit: Add helper C
$utilsContent = @"
# utils.py - Utility functions
def helper_a():
"""Helper function A."""
return "Helper A"
def helper_b():
"""Helper function B."""
return "Helper B"
def helper_c():
"""Helper function C."""
return "Helper C"
"@
Set-Content -Path "utils.py" -Value $utilsContent
git add .
git commit -m "Add helper C" | Out-Null
# BAD commit: Add broken helper D (completely wrong)
$utilsContent = @"
# utils.py - Utility functions
def helper_a():
"""Helper function A."""
return "Helper A"
def helper_b():
"""Helper function B."""
return "Helper B"
def helper_c():
"""Helper function C."""
return "Helper C"
def helper_d():
"""COMPLETELY BROKEN - throw away!"""
# This is all wrong and needs to be discarded
broken_code = "This doesn't even make sense"
return broken_code.nonexistent_method() # Will crash!
"@
Set-Content -Path "utils.py" -Value $utilsContent
git add .
git commit -m "Add broken helper D - DISCARD COMPLETELY!" | Out-Null
Write-Host "[CREATED] hard-reset branch with commit to reset --hard" -ForegroundColor Green
# ============================================================================
# Return to soft-reset to start
# ============================================================================
git switch soft-reset | Out-Null
# Return to module directory
Set-Location ..
Write-Host "`n=== Setup Complete! ===`n" -ForegroundColor Green
Write-Host "Three reset scenarios have been created:" -ForegroundColor Cyan
Write-Host " 1. soft-reset - Reset --soft (keep changes staged)" -ForegroundColor White
Write-Host " 2. mixed-reset - Reset --mixed (unstage changes)" -ForegroundColor White
Write-Host " 3. hard-reset - Reset --hard (discard everything) + reflog recovery" -ForegroundColor White
Write-Host "`n⚠️ CRITICAL SAFETY REMINDER ⚠️" -ForegroundColor Red
Write-Host "NEVER use git reset on commits that have been PUSHED!" -ForegroundColor Red
Write-Host "These scenarios are LOCAL ONLY for practice." -ForegroundColor Yellow
Write-Host "`nYou are currently on the 'soft-reset' branch." -ForegroundColor Cyan
Write-Host "`nNext steps:" -ForegroundColor Cyan
Write-Host " 1. cd challenge" -ForegroundColor White
Write-Host " 2. Read the README.md for detailed instructions" -ForegroundColor White
Write-Host " 3. Complete each reset challenge" -ForegroundColor White
Write-Host " 4. Run '..\\verify.ps1' to check your solutions" -ForegroundColor White
Write-Host ""