العودة إلى المدونة

مولّد git undo: الأمر الدقيق لفوضك

25 سبتمبر 2026

كان أحد الزملاء يجيب عن كل سؤال تراجع بـ «git reset —hard»، كما يجيب آخرون بـ «أطفئه وشغّله». نجح ذلك مرتين. أما الثالثة فكلّفتها جمعة بعد الظهر ودرس reflog لم يفرح به أحد. نشأ مركز Undo Anything in Git في هذا الموقع من ذلك الأسبوع — واليوم ينضم إليه أداة حقيقية.

مولّد git undo يعمل الآن: ثلاثة أسئلة تدخل، أمر واحدة دقيقة تخرج. بلا حساب وبلا رفع أي شيء — كل شيء يجري في متصفحك. حدّد هل رُفع الـ commit، وهل تحتفظ بالتغييرات، وهل يسحب غيرك الفرع؛ فيطبع الأمر الصحيحة git reset أو git revert أو إنقاذ reflog، مع تحذير في المواضع التي تعضّ فيها الأمر.

لماذا أداة لأربعة أوامر؟

لأن بيانات البحث تقول إن الناس يريدون الجواب لا المقالة. تُظهر Google Search Console هذا الموقع في المركز 12.3 لعبارة «git reset last commit keep changes» — 27 ظهورًا في أسبوع، وبلا نقرة واحدة. العبارة تطلب أمرًا بصوت مسموع، والباحث يتجاوز أي شيء يُلزمه بالقراءة. المولّد يجيب في شاشة واحدة.

النمط نفسه يتكرر في كل الصيغ: «and keep changes» و«but keep changes» و«keep the file». هؤلاء لا يدرسون نظرية التحكم بالإصدارات. لديهم فوضى الآن، ويريدون أقصر مخرج منها.

كيف يقرر المولّد

ثلاثة أسئلة، مأخوذة كما هي من دليل revert مقابل reset:

  1. أين الـ commit؟ غير مرفوع، مرفوع، أو مفقود تمامًا.
  2. ماذا يحدث للتغييرات؟ تُحفظ مُجهّزة، تُحفظ غير مُجهّزة، أو تُهمَل.
  3. من غيرك يسحب هذا الفرع؟ السؤال الذي يفصل بين إعادة كتابة نظيفة وحادثة فريق.

سؤال الفرع المشترك هو الأداة كلها. ما سواه ترف؛ ذلك سؤال إدارة الكوارث.

إجاباته كاملة:

الأمرالتاريخشجرة العملفرع مشترك؟
git reset --soft HEAD~1يتراجع 1التغييرات محفوظة ومُجهّزةلا — إعادة كتابة
git reset HEAD~1يتراجع 1التغييرات محفوظة غير مُجهّزةلا — إعادة كتابة
git reset --hard HEAD~1يتراجع 1التغييرات تهمَللا — مدمّر
git revert HEADيضيف commit عكسيًابلا مساسنعم — الخطوة الآمنة
git reflog + git switch -c recovery <sha>لا شيء مفقودتُستعاد من reflogإنقاذ بعد أي شيء

الأوامر التي يطبعها

كل الحالات التي يغطيها المولّد، جاهزة للّصق:

# بعد commit وبدون رفع، احتفظ بالتغييرات مُجهّزة
git reset --soft HEAD~1

# بعد commit وبدون رفع، احتفظ بالتغييرات غير مُجهّزة
git reset HEAD~1

# مرفوع وغيرك يسحب الفرع — التراجع المهذب الوحيد
git revert --no-edit HEAD~1..HEAD
git push

# بعد commit وفُقد — الـ reflog يعرف نحو 90 يومًا
git reflog
git switch -c recovery <sha من القائمة>

صيغة النطاق HEAD~1..HEAD تتراجع عن الـ commits التي تسمّيها تحديدًا دون إعادة بنائها واحدًا واحدًا — تستحق أن تعرفها حتى حين تكتبها الأداة عنك.

تحت الغطاء

المنطق جدول قرارات، لا سحر. ثلاثة أسئلة تعطي ثماني عشرة تركيبة؛ معظمها ينكمش إلى الحفنة نفسها من الأوامر، لأن «غير مرفوع + إهمال» و«مرفوع + فرعي وحدي + إهمال» يختلفان بذيل force-with-lease فقط. الصفحة مسار ثابت — بلا خادم، بلا تحليلات، بلا كوكيز — فتفتح على هاتف داخل غرفة خوادم، حيث تقع معظم طوارئ git، وزر النسخ يسلّمك الكتلة كاملة مع تعليقات التحذير.

ما يرفضه عن عمد

لا مساعدة في rebase التفاعلي — إن كنت تعيد ترتيب الـ commits فأنت تعرف أكثر مما تعلّم الأداة. ولا جراحة stash؛ فلذلك دليلها الخاص. وهو يأبى التخمين: حين تكون الحالة «مرفوع على فرع مشترك» فالأمر الوحيد الذي يعرضه هو revert، لأن البدائل تحرق الفرق. الدليل الموسّع للتراجع عن commit يشرح ما يفعله كل flag بالـ reflog؛ الأداة ببساطة تمنعك من اختيار الخطأ على عجل.

المصدر على github.com/mrsaynothing/git-undo — HTML وJavaScript خالصان، بلا خطوة بناء، بلا اعتماديات. انسخه وغيّر أسلوبه وخذ صياغتي كما هي. نسخة هذا الموقع تشغّل المنطق نفسه كصفحة SvelteKit ثابتة.

إن وفّر عليك جلسة reflog واحدة هذا العام، فقد دفع ثمن العشية التي كلّفتها. وإن أعطى جوابًا خاطئًا في حالة واجهتها، فقائمة issues في المستودع مفتوحة لهذا بالذات.

FAQ

ماذا يفعل مولّد git undo؟

يسأل ثلاثة أسئلة — هل رُفع الـ commit، هل تحتفظ بالتغييرات، هل يسحب غيرك هذا الفرع — ثم يطبع الأمر الصحيحة: reset أو revert أو إنقاذًا عبر reflog.

هل git reset --hard آمن؟

على الـ commits التي لم ترفعها قط، نعم — العمل الملقى يبقى قابلًا للاسترجاع عبر git reflog لنحو 90 يومًا. على فرع مشترك، أبدًا: استخدم revert بدلًا منه.

هل أحتاج حسابًا لاستخدام الأداة؟

لا. إنها صفحة ثابتة تعمل بالكامل في متصفحك — لا شيء يُرفع، ولا شيء يُسجَّل.

— mrsaynothing

— mrsaynothing

بناء وأعطال وما نُشر فعلًا.

ناقش هذا المقال على dev.to dev.to ↗

احصل على سجل البناء التالي بالبريد

رسالة واحدة لكل مقال. بالأدلة والأخطاء.

self-hosted · بلا أطراف ثالثة · إلغاء الاشتراك بنقرة واحدة

ما هذا؟

وكيلي نشر مقالًا حظرت نشره. بقي منشورًا يومًا كاملًا.

أعجبتك هذه الكتابات؟ بناء مثل هذا هو عملي. اشترك في النشرة