جا‌به‌جایی فایل ها

برخلاف بسیاری از سیستم‌های کنترل نسخه (VCS)، گیت به‌طور صریح حرکت فایل‌ها را ردیابی نمی‌کند. اگر فایلی را در گیت تغییر نام دهید، هیچ متاداده‌ای در گیت ذخیره نمی‌شود که به آن بگوید فایل تغییر نام داده شده است. با این حال، گیت در شناسایی این موضوع پس از واقعیت هوشمند است — که در ادامه به تشخیص حرکت فایل‌ها خواهیم پرداخت.

بنابراین، کمی گیج‌کننده است که گیت یک دستور mv دارد. اگر می‌خواهید فایلی را در گیت تغییر نام دهید، می‌توانید چیزی شبیه به این اجرا کنید:

$ git mv file_from file_to

و این به‌خوبی کار می‌کند. در واقع، اگر چیزی شبیه به این را اجرا کنید و وضعیت را بررسی کنید، خواهید دید که گیت آن را به‌عنوان یک فایل تغییر نام داده شده در نظر می‌گیرد:

$ git mv README.md README
$ git status

خروجی:

On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

 renamed: README.md -> README

با این حال، این معادل اجرای چیزی شبیه به این است:

$ mv README.md README
$ git rm README.md
$ git add README

گیت به‌طور ضمنی متوجه می‌شود که این یک تغییر نام است، بنابراین فرقی نمی‌کند که فایل را به این روش تغییر نام دهید یا با دستور mv. تنها تفاوت واقعی این است که git mv یک دستور است که به جای سه دستور دیگر، به‌صورت یکجا اجرا می‌شود — که یک عملکرد راحتی است. مهم‌تر اینکه، می‌توانید از هر ابزاری که دوست دارید برای تغییر نام یک فایل استفاده کنید و بعداً، قبل از کامیت، به اضافه کردن و حذف آن بپردازید.