mkdir exercice-reset && cd exercice-reset
git init
# إنشاء عدة إيداعات للاختبار
echo "print('v1')" > app.py && git add . && git commit -m "Version 1"
echo "print('v2')" > app.py && git add . && git commit -m "Version 2"
echo "print('v3')" > app.py && git add . && git commit -m "Version 3"
echo "print('v4')" > app.py && git add . && git commit -m "Version 4"
git log --oneline # سجّل التجزئاتالهدف: الرجوع إيداعين إلى الخلف، مع الإبقاء على التغييرات مجهّزة.
git reset --soft HEAD~2
# تحققات
git status # تغييرات في منطقة التجهيز؟
cat app.py # أي محتوى؟
git log --oneline # كم إيداعاً؟النتيجة المتوقعة:
v4إعادة ضبط ثم اختبار mixed:
git commit -m "Re-commit v4" # إعادة v4
git reset --mixed HEAD~1 # الرجوع إيداعاً واحداً (الوضع الافتراضي)
# تحققات
git status # تغييرات غير مجهّزة؟
cat app.py # أي محتوى؟
git log --oneline # كم إيداعاً؟النتيجة المتوقعة:
v4انتبه: Reset hard = مدمّر!
git add . # تجهيز التغييرات
git commit -m "Re-commit v4" # إعادة v4
git reset --hard HEAD~2 # حذف كل شيء، الرجوع إيداعين
# تحققات
git status # دليل العمل نظيف؟
cat app.py # أي محتوى؟
git log --oneline # كم إيداعاً؟النتيجة المتوقعة:
v2ملخص الأوضاع الثلاثة:
| الوضع | الإيداعات | التجهيز | دليل العمل |
|---|---|---|---|
--soft | يتراجع | يحتفظ | يحتفظ |
--mixed | يتراجع | يحذف | يحتفظ |
--hard | يتراجع | يحذف | يحذف |
فهمت الأوضاع الثلاثة؟ ممتاز! لم يعد لـ reset أسرار.