refactor: we're breaking out merge-conflicts
This commit is contained in:
348
01-essentials/07-reset/setup.ps1
Normal file
348
01-essentials/07-reset/setup.ps1
Normal 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 ""
|
||||
Reference in New Issue
Block a user