Git Reset

2 دقيقة

جدول المحتويات

  1. ما هو reset؟
  2. أوضاع reset الثلاثة
  3. Reset soft
  4. Reset mixed
  5. Reset hard
  6. الخطر والاحتياطات
  7. أوامر عملية

1. ما هو reset؟

Git reset = الرجوع في الزمن بإلغاء إيداعات.

المفهوم:

  • نقل الفرع نحو إيداع سابق
  • 3 أوضاع حسب ما تبقي أو تحذف
  • مدمّر إن أُسيء استخدامه

تشبيه: كمسح صفحات من دفتر.

العودة إلى جدول المحتويات

2. أوضاع reset الثلاثة

الوضعالإيداعاتالفهرس/التجهيزدليل العمل
--softيلغييحتفظيحتفظ
--mixedيلغييمسحيحتفظ
--hardيلغييمسحيمسح

تذكير بسيط:

  • Soft = الإيداعات فقط
  • Mixed = الإيداعات + التجهيز
  • Hard = كل شيء (خطير!)

العودة إلى جدول المحتويات

3. Reset soft

الاستخدام: إعادة آخر إيداع مع مزيد من التغييرات.

bash
mkdir demo-reset && cd demo-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"

# Reset soft: يلغي الإيداع، يبقي كل شيء في التجهيز
git reset --soft HEAD~1

git status                    # تغييرات مجهّزة جاهزة
git log --oneline            # إيداع أقل
cat app.py                   # محتوى v2 ما زال موجوداً

# إعادة إيداع برسالة محسَّنة
git commit -m "Version 2 - Avec nouvelles features"

العودة إلى جدول المحتويات

4. Reset mixed

الاستخدام: إلغاء الإيداعات وإخراجها من التجهيز (الوضع الافتراضي).

bash
echo "print('v3')" > app.py && git add . && git commit -m "Version 3"

# Reset mixed (أو مجرد git reset)
git reset HEAD~1

git status                   # تغييرات غير مجهّزة
git log --oneline           # إيداعات ملغاة
cat app.py                  # محتوى v3 ما زال موجوداً، لكن غير مجهّز

# يجب إعادة الإضافة قبل الإيداع
git add . && git commit -m "Version 3 - Refait proprement"

العودة إلى جدول المحتويات

5. Reset hard

خطر: يحذف كل شيء، حتى تعديلاتك غير المودَعة!

bash
echo "print('v4')" > app.py && git add . && git commit -m "Version 4"

# تعديلات جارية
echo "print('work in progress')" >> app.py

# Reset hard: يختفي كل شيء
git reset --hard HEAD~1

git status                  # Working directory clean
cat app.py                 # عاد إلى v2، العمل الجاري ضاع!

الاستخدام: عندما تريد حقاً رمي كل شيء والرجوع إلى الخلف.

العودة إلى جدول المحتويات

6. الخطر والاحتياطات

Reset مدمّر مع الإيداعات المشتركة!

لا تفعل هذا أبداً:

bash
git push origin main           # إيداعات مشتركة مع الفريق
git reset --hard HEAD~3        # يحذف 3 إيداعات مشتركة
git push --force              # يفرض الحذف عند الجميع
# = فوضى في الفريق!

قاعدة الأمان:

  • Reset مقبول على الإيداعات المحلية (غير المدفوعة)
  • Reset ممنوع على الإيداعات التي سبق مشاركتها
  • البديل: git revert (أأمن)

العودة إلى جدول المحتويات

7. أوامر عملية

الأمرالإجراء
git reset HEAD~1يلغي إيداعاً واحداً (mixed)
git reset --soft HEAD~2يلغي إيداعين، يبقي التجهيز
git reset --hard HEAD~1يلغي إيداعاً واحداً، يحذف كل شيء
git reset <hash>الرجوع إلى إيداع محدّد
git reset --hard origin/mainReset على النسخة البعيدة

Reset = قوي لكنه خطير. استخدمه بحذر!

العودة إلى جدول المحتويات