git rm

اللقطات الأساسية

إزالة الملفات من مجلد العمل ومنطقة التجهيز


يحذف الأمر 'git rm' ملفًا متتبَّعًا ويجهّز الحذف، فلا يحتويه الـ commit التالي. تحتفظ الـ commits الأقدم بالملف. ومع --cached يتوقف Git عن تتبّع الملف لكنه يتركه على قرصك — الحل المعتاد لملف سُجِّل بالخطأ. يرفض git rm حذف ملف فيه تغييرات غير مسجَّلة إلا إذا أضفت -f.

الصيغة

git rm [-f | --force] [-n] [-r] [--cached] [-q] [--] <pathspec>...
[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار

الخيارات

انقر على أي خيار لتوسيعه

مبتدئ (2)

إزالة الملف من منطقة التجهيز فقط. يبقى الملف على القرص كملف غير متتبَّع.

موصى بهإيقاف تتبّع ملف (سُجِّل بالخطأ مثلًا) دون حذفه

مثال

git rm --cached .env

الحذف حتى لو كان في الملف تغييرات غير مسجَّلة. تضيع تلك التغييرات.

عند الحاجةيحذف التغييرات غير المسجَّلة مع الملف — وتضيع

مثال

git rm -f app.js

اختيار الخيار المناسب

طرق إزالة ملف

ما يحدث على القرص وفي Git

الأمرعلى القرصفي الـ commit التالي
rm fileمحذوفيبقى موجودًا حتى تجهّز الحذف
git rm fileمحذوفمُزال
git rm --cached fileمحفوظأُزيل (يصبح الملف غير متتبَّع)

أمثلة

حذف ملف

git rm old.js

يحذف old.js ويجهّز الحذف.


إيقاف التتبّع

git rm --cached .env

ينسى Git الملف .env؛ ويبقى الملف على القرص.


حذف مجلد

git rm -r build/

يحذف مجلدًا وملفاته المتتبَّعة.

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

1
git rm --cached .env

إيقاف تتبّعه مع إبقائه على القرص

2
echo ".env" >> .gitignore

تجاهله من الآن فصاعدًا

3
git add .gitignore

تجهيز قاعدة التجاهل

4
git commit -m "Stop tracking .env"

Commit

حل المشكلات

error: the following file has local modifications

السبب: في الملف تغييرات غير مسجَّلة

سجّلها أو خبّئها بـ stash، أو استخدم --cached للإبقاء على الملف، أو -f للتخلّص منها

fatal: not removing 'dir' recursively without -r

السبب: المسار مجلد

أضف -r: git rm -r dir

ما زال سرّ في السجل

السبب: لا يؤثر git rm إلا في الـ commits القادمة

غيّر السرّ؛ إعادة كتابة السجل تحتاج أداة مثل git filter-repo

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

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

  • ✓استخدم git rm بدل rm + git add: خطوة واحدة ولا شيء يُنسى.
  • ✓أضف الملفات غير المتتبَّعة إلى .gitignore مباشرة بعد git rm --cached.
  • ✓اعتبر السرّ الذي دخل commit مسرَّبًا: غيّره، حتى بعد حذف الملف.

أخطاء متكررة

  • ✗حذف ملف بـ rm العادي ونسيان تجهيز الحذف.
  • ✗استخدام git rm وأنت تريد فقط إيقاف التتبّع: أضف --cached للإبقاء على الملف.
  • ✗توقّع أن يزيل git rm سرًّا من السجل — الـ commits الأقدم ما زالت تحتويه.

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

A:

جهّز الحذف بـ git rm <file> أو git add <file>، ثم نفّذ commit.

A:

قبل الـ commit: git restore --staged --worktree <file>. بعده: git restore --source=<commit> <file>.

A:

لا. الـ commits السابقة تحتفظ به؛ فقط الـ commit التالي يستبعده.