#!/bin/bash
# 14_reset_revert.sh - ההבדל בין reset ל-revert

# מצב: יצרנו מספר commits
echo "v1" > file.txt && git add . && git commit -m "Add v1"
echo "v2" > file.txt && git add . && git commit -m "Update to v2"
echo "v3" > file.txt && git add . && git commit -m "Update to v3"
echo "buggy" > file.txt && git add . && git commit -m "Add buggy code"

git log --oneline

# === reset === (משנה היסטוריה)

# ביטול ה-commit האחרון, השארת השינויים ב-staging
git reset --soft HEAD~1

# ביטול ה-commit + ניקוי staging (default)
git reset --mixed HEAD~1
git reset HEAD~1   # אותו דבר

# מסוכן! מחיקה מוחלטת
# git reset --hard HEAD~1

# חזרה ל-commit ספציפי (מוחק כל מה שאחריו)
# git reset --hard a3f5c2d

# === revert === (לא משנה היסטוריה - יוצר commit הפוך)

# יצירת commit חדש שמבטל commit ישן
git revert HEAD

# revert של commit ספציפי
git revert a3f5c2d

# revert של מספר commits
git revert HEAD~3..HEAD

# revert בלי commit אוטומטי (לעריכה לפני)
git revert -n a3f5c2d
git commit -m "Revert login feature, with explanation"

# === מתי להשתמש במה? ===
# reset  - commits מקומיים, לא נדחפו
# revert - commits שכבר בשרת או branches משותפים
