Git reset = الرجوع في الزمن بإلغاء إيداعات.
المفهوم:
تشبيه: كمسح صفحات من دفتر.
| الوضع | الإيداعات | الفهرس/التجهيز | دليل العمل |
|---|---|---|---|
| --soft | يلغي | يحتفظ | يحتفظ |
| --mixed | يلغي | يمسح | يحتفظ |
| --hard | يلغي | يمسح | يمسح |
تذكير بسيط:
الاستخدام: إعادة آخر إيداع مع مزيد من التغييرات.
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"الاستخدام: إلغاء الإيداعات وإخراجها من التجهيز (الوضع الافتراضي).
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"خطر: يحذف كل شيء، حتى تعديلاتك غير المودَعة!
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، العمل الجاري ضاع!الاستخدام: عندما تريد حقاً رمي كل شيء والرجوع إلى الخلف.
Reset مدمّر مع الإيداعات المشتركة!
لا تفعل هذا أبداً:
git push origin main # إيداعات مشتركة مع الفريق
git reset --hard HEAD~3 # يحذف 3 إيداعات مشتركة
git push --force # يفرض الحذف عند الجميع
# = فوضى في الفريق!قاعدة الأمان:
git revert (أأمن)| الأمر | الإجراء |
|---|---|
git reset HEAD~1 | يلغي إيداعاً واحداً (mixed) |
git reset --soft HEAD~2 | يلغي إيداعين، يبقي التجهيز |
git reset --hard HEAD~1 | يلغي إيداعاً واحداً، يحذف كل شيء |
git reset <hash> | الرجوع إلى إيداع محدّد |
git reset --hard origin/main | Reset على النسخة البعيدة |
Reset = قوي لكنه خطير. استخدمه بحذر!