git replace

الـ patches وإعادة الكتابة

استبدال كائن بآخر دون إعادة كتابة السجل


يطلب الأمر 'git replace' من Git استخدام كائن بدل آخر أينما ظهر — مثلًا لتطعيم سجل قديم بسجل جديد، أو لإخفاء commit معطوب — دون إعادة كتابة أي commit. تُخزَّن الاستبدالات كمراجع تحت refs/replace/ ويمكن مشاركتها أو إزالتها. تتبعها معظم الأوامر؛ ويعلّم git log الـ commits المستبدلة.

الصيغة

git replace [-f] <object> <replacement>
git replace --graft <commit> [<parent>...]
git replace -d <object>...
git replace -l
[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار

أمثلة

تطعيم سجل

git replace --graft <first-new-commit> <last-old-commit>

وصل سجل قديم مستورد.


السرد

git replace -l

الكائنات المستبدلة.


تراجع

git replace -d <object>

إزالة استبدال.

أمثلة على سير العمل

1
git fetch old-repo

جلب الـ commits القديمة

2
git replace --graft <new-root> old/main

جعل الجذر الجديد امتدادًا للسجل القديم

حل المشكلات

الاستبدال غير مرئي للآخرين

السبب: لا يُدفع refs/replace افتراضيًا

git push origin "refs/replace/*"

نصائح وأخطاء شائعة

أفضل الممارسات

  • ✓استخدم --graft لوصل السجلات؛ وتجنّب الاستبدالات في الإصلاحات اليومية.

أخطاء متكررة

  • ✗نسيان أن الاستبدالات محلية ما لم تدفع refs/replace/*.

الأسئلة الشائعة

A:

نعم: git --no-replace-objects <command>.