Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

Git Reset

آخر تحديث

git reset ينقل الفرع الحالي إلى commit مختلف، وحسب الوضع، يحدّث منطقة التجهيز (الفهرس) وشجرة العمل لتتطابق. تختلف الأوضاع الثلاثة فقط في مدى وصول هذا التحديث: --soft ينقل الفرع ويتوقف، و--mixed (الوضع الافتراضي) يعيد أيضًا ضبط منطقة التجهيز، و--hard يكتب فوق ملفات عملك كذلك.

بما أن --hard يتجاهل العمل غير المثبَّت (uncommitted)، فاعرف أي وضع تريده قبل تشغيله. جرّب هذه الأوامر بأمان في ساحة الطرفية Git playground - وهي صدفة حقيقية داخل متصفحك.

الأوضاع الثلاثة

ModeMoves branchResets stagingResets working tree
--softنعملالا
--mixed (default)نعمنعملا
--hardنعمنعمنعم

الصيغة

CommandWhat it does
git reset --soft HEAD~1التراجع عن آخر commit مع إبقاء التغييرات مجهَّزة
git reset HEAD~1التراجع عن آخر commit مع إبقاء التغييرات غير مجهَّزة
git reset --hard HEAD~1التراجع عن آخر commit مع تجاهل التغييرات
git reset <file>إخراج ملف من التجهيز (مع الاحتفاظ بتغييراته)
git reset --hard origin/mainإجبار الفرع المحلي على مطابقة الفرع البعيد

حالات شائعة

GoalCommand
إخراج كل شيء من التجهيزgit reset
إخراج ملف واحد من التجهيزgit reset README.md
الرجوع 3 commits مع الاحتفاظ بالعملgit reset --soft HEAD~3
تجاهل جميع التغييرات المحلية منذ commit معيّنgit reset --hard <hash>

الأسئلة الشائعة حول git reset

ما الفرق بين --soft و--mixed و--hard؟
الثلاثة جميعها تنقل مؤشر فرعك إلى الـ commit المستهدف؛ لكنها تختلف في ما تمسّه إضافة إلى ذلك. --soft لا يغيّر أي شيء آخر، لذا تبقى تغييراتك مجهَّزة. --mixed (الوضع الافتراضي) يمسح أيضًا منطقة التجهيز، فتصبح التغييرات غير مجهَّزة لكنها تبقى في ملفاتك. --hard يكتب أيضًا فوق شجرة عملك لتتطابق مع الـ commit المستهدف، متجاهلًا التغييرات غير المثبَّتة.
كيف أُخرج ملفًا من التجهيز باستخدام git reset؟
شغّل git reset <file> (مثلًا git reset README.md)، أو git reset بدون مسار لإخراج كل شيء من التجهيز. هذا يزيل الملف من منطقة التجهيز لكنه يبقي تعديلاتك في شجرة العمل. في إصدارات Git الأحدث يمكنك أيضًا استخدام git restore --staged <file>، الذي يؤدي الشيء نفسه بصورة أوضح.
هل git reset --hard قابل للتراجع؟
ليس من شجرة العمل - فـ --hard يتجاهل التغييرات غير المثبَّتة نهائيًا. لكن العمل المثبَّت (committed) الذي أزلته بالـ reset يمكن عادةً استرجاعه: شغّل git reflog للعثور على hash الـ commit، ثم git reset --hard <hash> (أو أنشئ فرعًا عنده). أما التغييرات غير المثبَّتة التي لم تُجهَّز أو تُثبَّت أبدًا فلا يمكن استرجاعها، لذا استخدم --hard بحذر.
ما الفرق بين git reset و git revert؟
git reset يعيد كتابة التاريخ بنقل الفرع إلى الوراء - وهو مقبول للـ commits المحلية، لكنه خطير على الـ commits التي سبق أن دفعتها (push). أما git revert فيُبقي التاريخ سليمًا ويضيف commit جديدًا يلغي أثر commit سابق، وهو الخيار الآمن للفروع المشتركة.
هل يمكنني التدرّب على هذا عبر الإنترنت؟
نعم. افتح ساحة الطرفية Git playground لتشغيل git reset في صدفة حقيقية داخل متصفحك - دون الحاجة إلى تثبيت أي شيء. كما يغطي كورس Git التفاعلي المجاني من Coddy إعادة الضبط والتراجع عن التغييرات خطوة بخطوة.
Coddy programming languages illustration

تعلّم Git مع Coddy

ابدأ الآن