Git Reset --hard
آخر تحديث
ينقل git reset --hard فرعك إلى commit هدف ويجبر كلًّا من منطقة التجهيز (staging area) وشجرة العمل لديك على مطابقته تمامًا - متجاهلًا في أثناء ذلك كل تغيير غير مُودَع. إنه أكثر أشكال git reset تدميرًا، لذا تأكد أنك لم تعد بحاجة إلى عملك الحالي قبل تشغيله.
هل أعدت ضبط commit عن طريق الخطأ؟ عادةً ما يمكن استعادة hard reset عبر git reflog. جرّب هذا بأمان في ساحة الطرفية (terminal playground) - وهي shell حقيقية داخل متصفحك.
الصيغة
| Command | What it does |
|---|---|
git reset --hard | يتجاهل جميع التغييرات غير المُودَعة (يبقى على HEAD) |
git reset --hard HEAD~1 | يزيل آخر commit وتغييراته |
git reset --hard <hash> | يعيد الفرع قسرًا إلى commit محدد |
git reset --hard origin/main | يجعل الفرع المحلي مطابقًا للمستودع البعيد تمامًا |
استعادة hard reset
العمل المُودَع الذي تجاهلته بإعادة الضبط عادةً ما يظل قابلًا للاستعادة.
| Step | Command | Result |
|---|---|---|
| 1 | git reflog | يسرد الأماكن التي مرّ بها HEAD، مع الـ hashes |
| 2 | git reset --hard <hash> | يعود إلى الـ commit الذي كان قبل إعادة الضبط |
أسئلة شائعة حول git reset --hard
ماذا يفعل git reset --hard فعليًا؟
ينقل فرعك الحالي إلى commit الهدف ويكتب فوق كلٍّ من منطقة التجهيز وشجرة العمل لديك ليطابقاه. أي تغييرات غير مُودَعة - سواء كانت مُجهَّزة أم لا - يتم تجاهلها. مقارنةً بـ
--soft (الذي يبقي التغييرات مُجهَّزة) و--mixed (الذي يبقيها غير مُجهَّزة)، يُعد --hard الوضع الوحيد الذي يتخلص من التغييرات.كيف أتجاهل جميع تغييراتي المحلية؟
شغّل
git reset --hard دون تحديد commit لإعادة ضبط شجرة العمل إلى آخر commit، ما يمحو التعديلات غير المُودَعة. ولمسح الملفات غير المتتبَّعة التي لا يمسّها reset أيضًا، اتبعه بـ git clean -fd.كيف أعيد ضبط فرعي ليطابق المستودع البعيد؟
شغّل
git fetch ثم git reset --hard origin/main (استبدله بفرعك). هذا يجبر فرعك المحلي على مطابقة المستودع البعيد تمامًا، متجاهلًا الـ commits والتغييرات المحلية التي تباعدت عنه - وهو مفيد عندما يسير فرعك المحلي على نحو خاطئ وتريد نسخة المستودع البعيد فقط.هل يمكنني التراجع عن git reset --hard؟
العمل المُودَع عادةً نعم: شغّل
git reflog لإيجاد الـ commit الذي كان فرعك يشير إليه قبل إعادة الضبط، ثم git reset --hard <hash> للعودة إليه. أما التغييرات التي لم تُودَع قط (الموجودة فقط في شجرة العمل لديك) فلا يمكن استعادتها، لذا تعامل مع --hard بحذر.هل يمكنني التدرب على هذا عبر الإنترنت؟
نعم. افتح ساحة الطرفية (terminal playground) لتشغيل
git reset --hard في shell حقيقية داخل متصفحك - دون تثبيت أي شيء. كما يغطي دورة Git التفاعلية المجانية من Coddy إعادة الضبط والتراجع عن التغييرات خطوة بخطوة.