كيفية التراجع عن آخر Commit في Git باستخدام revert و reset

دقائق القراءة: 4

كيفية التراجع عن آخر Commit في Git

أثناء العمل على مشروع برمجي باستخدام Git، قد يحدث أحياناً أن تُجري Commit أخيراً ثم تكتشف لاحقاً أنه تضمّن خطأً، أو أنه لم يكن من المفترض حفظه بهذه الصورة. في هذه الحالة، ستحتاج إلى التراجع عن آخر Commit بطريقة صحيحة تحافظ على سير العمل وتمنع حدوث مشاكل في سجل المشروع.

لحسن الحظ، يوفّر Git أكثر من طريقة للتعامل مع هذا السيناريو. والطريقتان الأكثر شيوعاً هما git revert و git reset. ورغم أن كلاهما يُستخدم للتراجع عن Commit، فإن الفرق بينهما جوهري ويؤثر بشكل مباشر في تاريخ المشروع وطريقة تعاون الفريق.

التراجع عن آخر Commit في Git باستخدام أوامر revert و reset

الطريقة الأولى: استخدام git revert

يُعد الأمر git revert الخيار الأكثر أماناً في كثير من الحالات، خصوصاً إذا كان الـ Commit قد تم رفعه بالفعل إلى مستودع مشترك. هذا الأمر لا يحذف الـ Commit من السجل، بل ينشئ Commit جديداً يعكس التغييرات التي أُدخلت سابقاً.

بمعنى آخر، بدلاً من تعديل تاريخ المشروع، يقوم Git بإضافة سجل جديد يلغي أثر السجل السابق، وهذا يجعل العملية واضحة وآمنة عند العمل الجماعي.

صيغة استخدام git revert

git revert <commit-to-revert>

ستحتاج هنا إلى تحديد المعرّف الخاص بالـ Commit الذي تريد التراجع عنه. ويمكنك الحصول عليه بسهولة باستخدام أمر git log الذي يعرض سجل الـ Commits في المشروع.

git log

عند تنفيذ هذا الأمر، سيظهر لك سجل زمني للـ Commits، وعادةً يكون أول Commit ظاهر في الأعلى هو الأحدث. انسخ المعرّف النصي القصير أو الكامل لذلك الـ Commit، ثم استخدمه مع أمر git revert.

سجل Git يوضح كيفية العثور على معرف Commit المطلوب للتراجع باستخدام git revert

في الصورة السابقة، تمثل كل دائرة Commit ضمن سجل المشروع.

متى يكون git revert هو الخيار الأفضل؟

  • عندما يكون الـ Commit قد تم رفعه إلى Remote Repository.
  • عندما تعمل ضمن فريق ولا تريد تعديل تاريخ المشروع.
  • عندما تحتاج إلى طريقة آمنة وواضحة يمكن تتبعها لاحقاً.

الطريقة الثانية: استخدام git reset

يمكنك أيضاً التراجع عن آخر Commit باستخدام الأمر git reset، لكنه يتطلب حذراً أكبر. السبب هو أن هذا الأمر يغيّر تاريخ الـ Commits عبر تحريك المؤشر HEAD إلى Commit سابق، وبالتالي يتم تجاهل ما بعده بحسب نوع reset المستخدم.

لهذا السبب، لا يُنصح باستخدام git reset إلا في الحالات التي يكون فيها الـ Commit موجوداً محلياً فقط، ولم تتم مشاركته بعد مع الآخرين.

التراجع مع الاحتفاظ بالتعديلات باستخدام –soft

إذا كنت تريد إزالة آخر Commit مع الإبقاء على التعديلات داخل بيئة العمل حتى تتمكن من تعديلها أو إعادة Commit بشكل أفضل، فاستخدم الخيار --soft:

git reset --soft HEAD~1

يقوم هذا الأمر بإرجاع الفرع الحالي إلى Commit سابق بمقدار خطوة واحدة، لكنه لا يحذف التعديلات التي كانت ضمن Commit الأخير. لذلك فهو مفيد إذا كنت تريد فقط إعادة تنظيم Commit أو تعديل رسالته أو تقسيمه إلى أكثر من Commit.

استخدام git reset --soft للتراجع عن آخر Commit مع الاحتفاظ بالتعديلات

في الصورة السابقة، تمثل كل دائرة Commit في شجرة المشروع.

التراجع الكامل مع حذف التعديلات باستخدام –hard

إذا كنت تريد التراجع عن آخر Commit وحذف جميع التغييرات غير المحفوظة أيضاً، فيمكنك استخدام الخيار --hard:

git reset --hard HEAD~1

هذا الأمر يعيد المشروع إلى الحالة السابقة مباشرة، ويحذف آخر Commit بالإضافة إلى أي تغييرات غير committed موجودة في بيئة العمل. لذلك يجب استخدامه بحذر شديد، لأنه قد يؤدي إلى فقدان عمل لا يمكن استعادته بسهولة.

استخدام git reset --hard للتراجع عن آخر Commit وحذف التعديلات نهائياً

في هذه الصورة أيضاً، تمثل كل دائرة Commit ضمن التسلسل الزمني للمشروع.

ما الفرق بين git reset و git revert؟

الأمر طريقة العمل هل يغيّر التاريخ؟ أفضل استخدام
git revert ينشئ Commit جديداً يعكس التغييرات السابقة لا عند العمل على مستودع مشترك أو بعد Push
git reset يعيد HEAD إلى Commit سابق نعم عند العمل المحلي قبل مشاركة التغييرات

متى تستخدم كل أمر؟

  1. استخدم git revert إذا كان الـ Commit قد وصل إلى المستودع المشترك.
  2. استخدم git reset إذا كنت تعمل محلياً فقط وتفهم أثر تعديل السجل.
  3. اختر --soft عندما تريد الاحتفاظ بالتعديلات.
  4. اختر --hard فقط إذا كنت متأكداً من رغبتك في حذف التعديلات نهائياً.

نصائح مهمة قبل التراجع عن آخر Commit

  • تحقق أولاً مما إذا كان الـ Commit قد تم عمل Push له أم لا.
  • استخدم git log أو git status لفهم الحالة الحالية للمستودع.
  • تجنب git reset --hard إذا كانت لديك تغييرات لم تحفظ نسخة منها.
  • في بيئات العمل التعاونية، اجعل git revert خيارك الأول غالباً.

الخلاصة التقنية

إذا كان هدفك التراجع عن آخر Commit بأمان ودون العبث بتاريخ المشروع، فإن git revert هو الخيار الأنسب، خاصة في المشاريع المشتركة. أما git reset فهو أداة قوية وسريعة للاستخدام المحلي، لكنه يتطلب فهماً واضحاً لتأثيره على سجل الـ Commits. الاختيار الصحيح بين الأمرين لا يعتمد فقط على الرغبة في التراجع، بل على مكان وجود الـ Commit وطبيعة سير العمل داخل الفريق.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *