Git: التراجع عن كوميت
آخر تحديث
تعتمد طريقة التراجع عن كوميت على أي كوميت هو، وهل دُفع بالفعل أم لا. الكوميت الأقدم المدفون في سجلك - أو أي شيء تمت مشاركته بالفعل - يستدعي git revert، الذي يضيف كوميت جديدًا يعكسه دون إعادة كتابة أي شيء. أما سلسلة من الكوميتات المحلية الحديثة فيمكن إزالتها ببساطة عبر git reset. وإذا كان كل ما تحتاجه هو التراجع عن أحدث كوميت، فإن صفحة التراجع عن آخر كوميت في Git تغطي كل أشكال هذا الحل السريع.
جرّب هذه الأوامر في ساحة الطرفية - صدفة حقيقية داخل متصفحك، دون الحاجة إلى تثبيت أي شيء.
أي أمر تستخدم
| Situation | Command |
|---|---|
| التراجع عن كوميت أقدم واحد مع الإبقاء على كل ما بعده | git revert <hash> |
| التراجع عن كوميت دفعته بالفعل | git revert <hash> |
| التراجع عن آخر 3 كوميتات محلية مع الاحتفاظ بالعمل | git reset --soft HEAD~3 |
| التراجع عن آخر 3 كوميتات محلية مع تجاهل العمل | git reset --hard HEAD~3 |
| التراجع عن نطاق بكوميتات عكسية جديدة | git revert HEAD~3..HEAD |
reset vs revert
| Behavior | git reset | git revert |
|---|---|---|
| يعيد كتابة السجل | نعم | لا |
| آمن على الكوميتات المدفوعة | لا | نعم |
| ينشئ كوميت جديدًا | لا | نعم |
| يعمل على كوميتات قديمة في منتصف السجل | لا | نعم |
| يمكنه تجاهل التغييرات | نعم (--hard) | لا |
مثال تطبيقي
تراجع عن كوميت قديم محدد - حتى لو كان مدفوعًا بالفعل - دون المساس بالكوميتات التي جاءت بعده.
| Step | Command | Result |
|---|---|---|
| 1 | git log --oneline | اعثر على هاش الكوميت السيئ (مثل a1b2c3d) |
| 2 | git revert a1b2c3d | كوميت جديد يعكسه؛ والكوميتات اللاحقة لا تُمس |
| 3 | git push | شارك الإصلاح - دون إعادة كتابة أي سجل |
الأسئلة الشائعة حول التراجع عن كوميت في Git
كيف أتراجع عن كوميت أقدم دون فقدان الكوميتات التي تليه؟
استخدم
git revert <hash>. ينشئ revert كوميت جديدًا يعكس فقط الكوميت الذي تحدده - ويبقى كل كوميت بعده تمامًا كما كان. اعثر على الهاش أولًا عبر git log --oneline. وإذا تعارض العكس مع تغييرات لاحقة، يتوقف Git مؤقتًا لتحل التعارض ثم تنفّذ git revert --continue.كيف أتراجع عن عدة كوميتات دفعة واحدة؟
للكوميتات المحلية فقط، يزيل
git reset --soft HEAD~3 آخر ثلاثة كوميتات مع إبقاء تغييراتها في الـ stage (استخدم --hard لتجاهلها). أما الكوميتات المدفوعة فاعكس النطاق بدلًا من ذلك: يعكس git revert --no-commit HEAD~3..HEAD الثلاثة جميعًا، ثم يسجّل git commit واحد عملية التراجع.كيف أتراجع عن كوميت دفعته بالفعل؟
استخدم
git revert <hash> بدلاً من reset. ينشئ revert كوميت جديدًا يلغي تغييرات الكوميت المستهدف مع إبقاء السجل سليمًا. هذه هي الطريقة الآمنة للتراجع عن الكوميتات المشتركة - فإعادة كتابة السجل المدفوع باستخدام reset تُجبر الجميع على مواءمة نسخهم.متى أستخدم reset ومتى أستخدم revert؟
استخدم reset عندما تكون الكوميتات لك وحدك وما زالت محلية: فهو ببساطة يعيد الفرع إلى الوراء وكأنها لم تحدث قط. واستخدم revert عندما يكون الكوميت مدفوعًا أو مشتركًا أو في منتصف السجل: فهو يلغي التغييرات بكوميت جديد يمكن للجميع سحبه بأمان.
هل يمكنني التدرّب على هذا عبر الإنترنت؟
نعم. افتح ساحة الطرفية لتشغيل هذه الأوامر في صدفة حقيقية داخل متصفحك، دون الحاجة إلى تثبيت أي شيء. كما تتناول دورة Git التفاعلية المجانية من Coddy التراجع عن التغييرات خطوة بخطوة.