خلاصه:‌ وقتی فایلی رو با دستورِ rm از مسیرِ‌کاری حذف می‌کنیم باید همون فایل یا فایل‌ها یا period با دستورِ git add از staging area هم حذف کنیم. بجای این دوباره کاری می‌تونیم از دستورِ git rm استفاده کنیم.


بیاین بگیم که متوجه شدیم که دیگه file2 رو در پروژه‌مون نمی‌خوایم چون کد‌هایِ بلااستفاده داره.

دستورِ زیر رو برای حذفِ این فایل می‌نویسیم. دستورِ زیر یه دستورِ گیت نیست چون با گیت شروع نمی‌شه. دستور زیر دستورِ استاندارد یونیکس هست.

rm file2.txt

حالا مسیرِ کاری‌مون dirty شده. git status رو اجرا می‌کنیم.

On branch master
Changes not staged for commit:
	(use "git add/rm <file>..." to update what will be committed)
	(use "git restore <file>..." to discard changes in working directory)
		
			deleted:     file2.txt

no changes added to commit (use "git add" and/or "git commit -a")

فقط یه دونه تغییر داشتیم که هنوز برای کامیت شدن stage نشده. File2.txt رو از Working Directory پاک کردیم ولی هنوز در Staging area هستش. با دستور زیر این رو ثابت می‌کنیم.

git ls-files
file1.txt
file2.txt

هر موقع که تغییراتی رو انجام می‌دیم باید اون تغییرات رو با git add به اصطلاح Stage کنیم.

git add file2.txt

حالا با دستورِ بالا file2.txt در staging area هم دیگه نیست. خروجیِ git status هم زیری خواهد بود.

On branch master
Changes to be committed:
	(use "git restore -—staged <file>..." to unstage)
		deleted: file2.txt

یه تغییر داریم که آماده‌ی کامیت هست.

git commit -m "Remove unused code."
[master 138c8ef] Remove unused code.
1 file changed, 1 deletion(—)
delete mode 100644 file2.txt

پس باید file2.txt رو هم از مسیرِکاری پاکش کنیم و هم از staging area. چون این یک عملِ رایجه. گیت به ما یک دستور برای انجام هر دوشون بصورتِ یکجا می‌ده.

git rm file2.txt

بجایِ استفاده از rm استانداردِ یونیکس از git rm استفاده می‌کنیم. و البته می‌تونیم این دستور رو رویِ چندین فایل انجام بدیم.

git rm file2.txt file1.txt

همچنین می‌تونیم از pattern هم استفاده کنیم.

git rm *.txt

با این دستور، گیت فایلِ مورد نظر رو هم از working directory و هم از staging area پاک می‌کنه.