ما الفرق بين git reset
و git revert
؟
عند العمل على مشاريع البرمجيات باستخدام نظام التحكم في الإصدارات Git، قد تواجه مواقف تحتاج فيها إلى التراجع عن تغييرات معينة أو إعادة ترتيب حالة المشروع إلى نقطة سابقة. في مثل هذه الحالات، توفر Git
أوامر قوية مثل git reset
وgit revert
. ومع ذلك، قد يكون من المربك للمبتدئين وحتى لبعض المستخدمين المتقدمين فهم الفرق بين هذين الأمرين. في هذه المقالة، سنشرح بشكل مفصل الفرق بين git reset
و git revert
، وكيفية استخدام كل منهما، وأفضل الحالات المناسبة لهما.
ما هو git reset
؟
يُستخدم أمر git reset
لإعادة تعيين حالة HEAD والفهرس (index) وسجل العمل (working directory) إلى نقطة محددة في التاريخ. يعد هذا الأمر قويًا جدًا، ولكنه يمكن أن يكون خطيرًا إذا لم يُستخدم بشكل صحيح، لأنه يمكن أن يؤدي إلى فقدان البيانات. يعتمد التأثير الفعلي لأمر git reset
على الخيارات المستخدمة معه.
أنواع git reset
- –soft: عند استخدام هذا الخيار، يتم إعادة تعيين HEAD فقط إلى الالتزام المستهدف. لا يتم تعديل الفهرس أو سجل العمل، وتظل التغييرات جاهزة للإضافة.
- –mixed (الخيار الافتراضي): يقوم بإعادة تعيين HEAD والفهرس إلى الالتزام المستهدف. تبقى التغييرات في سجل العمل ولكن يتم إزالتها من الفهرس.
- –hard: يعيد تعيين HEAD والفهرس وسجل العمل إلى الالتزام المستهدف. يتم فقدان جميع التغييرات غير المرتبطة بشكل دائم.
أمثلة على استخدام git reset
# إعادة تعيين HEAD فقط
git reset --soft HEAD~1
# إعادة تعيين HEAD والفهرس
git reset --mixed HEAD~1
# إعادة تعيين HEAD والفهرس وسجل العمل
git reset --hard HEAD~1
ما هو git revert
؟
على عكس git reset
، يُستخدم git revert
لإنشاء التزام جديد يقوم بتطبيق عكس تغييرات التزام سابق. هذا يعني أن git revert
لا يغير سجل Git
التاريخي، بل يُبقي عليه سليماً من خلال إضافة التزام جديد. يُعتبر هذا مفيدًا جدًا عند العمل مع فرق، حيث يُفضل تجنب تعديل السجل المشترك.
كيفية عمل git revert
عند تشغيل git revert
، يقوم Git
بإنشاء عملية عكس للتغييرات التي أُجريت في الالتزام المستهدف. بعد ذلك، يطلب منك إدخال رسالة الالتزام الجديدة التي تشرح العملية.
مثال على استخدام git revert
# عكس التزام معين
git revert
# عكس عدة التزامات
git revert
الفرق الرئيسي بين git reset
و git revert
العنصر | git reset |
git revert |
---|---|---|
التأثير على السجل | يعدل السجل ويمكن أن يؤدي إلى فقدان الالتزامات. | يحافظ على السجل عن طريق إضافة التزام جديد. |
المناسب للاستخدام الفردي أو الجماعي | أفضل للاستخدام الفردي أو في الفروع غير المشتركة. | أفضل للاستخدام الجماعي وفي الفروع المشتركة. |
فقدان البيانات | يمكن أن يؤدي إلى فقدان البيانات إذا لم يتم استخدامه بحذر. | لا يؤدي إلى فقدان البيانات. |
إنشاء التزام جديد | لا ينشئ التزامًا جديدًا. | ينشئ التزامًا جديدًا لعكس التغييرات. |
متى تستخدم git reset
؟
يُفضل استخدام git reset
في الحالات التالية:
- عندما تعمل على فرع خاص بك وغير مشترك مع فريق.
- لإزالة الالتزامات غير المرغوب فيها قبل مشاركتها مع الآخرين.
- لتعديل الفهرس وسجل العمل بسرعة.
متى تستخدم git revert
؟
يُفضل استخدام git revert
في الحالات التالية:
- عندما تعمل على فرع مشترك مع فريق.
- للحفاظ على تاريخ المشروع بشكل نظيف وسليم.
- لتجنب مخاطر تعديل السجل السابق.
الخلاصة
يعد كل من git reset
و git revert
أدوات قوية في Git
، ولكن لكل منهما استخداماته الخاصة. إذا كنت بحاجة إلى تعديل السجل الحالي أو إزالة الالتزامات الأخيرة، فإن git reset
هو الخيار المناسب، ولكن يجب استخدامه بحذر. أما إذا كنت تعمل ضمن فريق وترغب في التراجع عن تغييرات سابقة دون التأثير على السجل المشترك، فإن git revert
هو الخيار الأمثل. تذكر دائمًا أن تفهم تأثير هذه الأوامر على مشروعك قبل استخدامها لتجنب أي مشاكل غير متوقعة.