git revert
التراجع عن commit بإنشاء commit جديد
يتراجع الأمر 'git revert' عن commit سابق بإضافة commit جديد يطبّق التغيير المعاكس. لا يُعاد كتابة السجل — يبقى الـ commit الأصلي — لذا فهو الطريقة الآمنة للتراجع عن commits دُفعت وشوركت. قد يحدث تعارض إذا عدّلت commits لاحقة الأسطر نفسها؛ حُلّه ثم نفّذ git revert --continue.
الصيغة
git revert [--[no-]edit] [-n] [-m <parent-number>] <commit>...
git revert (--continue | --skip | --abort | --quit)الخيارات
اختيار الخيار المناسب
revert مقابل reset
طريقتان للتراجع عن commits
| الأمر | التاريخ | آمن بعد الدفع؟ |
|---|---|---|
git revert <commit> | يضيف commit تراجع | نعم |
git reset --hard <commit> | يزيل commits من الفرع | لا — يحتاج دفعًا قسريًا |
أمثلة
التراجع عن آخر commit
git revert HEADينشئ commit يتراجع عن HEAD.
التراجع عن commit أقدم
git revert a1b2c3dيتراجع عن ذلك الـ commit ويُبقي اللاحقة.
التراجع عن دمج
git revert -m 1 <merge-commit>يتراجع عن التغييرات التي جلبها الدمج.
أمثلة على سير العمل
git log --onelineالعثور على الـ commit
git revert a1b2c3dإنشاء commit التراجع
git pushمشاركته — دون دفع قسري
حل المشكلات
error: commit is a merge but no -m option was given
السبب: للدمج أبوان
استخدم git revert -m 1 <commit>
تعارض أثناء الـ revert
السبب: عدّلت commits لاحقة الأسطر نفسها
أصلح الملفات، ونفّذ git add، ثم git revert --continue (أو --abort)
نصائح وأخطاء شائعة
أفضل الممارسات
- ✓استخدم revert للـ commits المشتركة؛ وreset للمحلية فقط.
- ✓اشرح السبب في رسالة الـ revert.
- ✓ابدأ بالأحدث عند التراجع عن عدة commits.
أخطاء متكررة
- ✗استخدام git reset على commits مدفوعة بدل git revert، وإجبار الجميع على إصلاح سجلّهم.
- ✗التراجع عن دمج دون -m.
- ✗إعادة دمج فرع تم التراجع عنه والتساؤل لماذا لا تعود تغييراته — تراجع عن الـ revert أولًا.
الأسئلة الشائعة
لا. يضيف commit جديدًا؛ ويبقى الأصلي في السجل.
نعم — فيُعاد تطبيق التغيير الأصلي.
git revert --abort.