مرحله‌بندی فایل‌های تغییریافته

حال بیایید یک فایل ردیابی شده قبلی را تغییر دهیم. اگر فایلی به نام CONTRIBUTING.md را تغییر دهید و سپس دستور git status را دوباره اجرا کنید، خروجی چیزی شبیه به این خواهد بود:

$ 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)

 new file: README

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

 modified: CONTRIBUTING.md

فایل CONTRIBUTING.md تحت عنوان "changes not staged for commit" قرار دارد - این به این معناست که فایل ردیابی شده‌ای در دایرکتوری کاری تغییر یافته اما هنوز مرحله بندی نشده است. برای مرحله بندی آن، از دستور git addاستفاده می‌کنید.

دستور git add چندمنظوره است - شما از آن برای شروع ردیابی فایل‌های جدید، مرحله بندی فایل‌ها و همچنین سایر کارها مانند علامت‌گذاری فایل‌های درگیر در ادغام به عنوان حل شده استفاده می‌کنید. می تواند مفید باشد که به آن به عنوان "اضافه کردن دقیقا همین محتوا به کامیت بعدی" فکر کنید تا "اضافه کردن این فایل به پروژه". بیایید اکنون git add را برای مرحله بندی اول CONTRIBUTING.md اجرا کنیم و سپس دوباره git status را اجرا کنیم:

$ git add CONTRIBUTING.md
$ 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)

new file: README
modified: CONTRIBUTING.md

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

$ vim CONTRIBUTING.md
$ 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)

 new file: README
modified: CONTRIBUTING.md

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

 modified: CONTRIBUTING.md

چرا CONTRIBUTING.md هم به عنوان مرحله بندی شده و هم به عنوان ردیابی نشده فهرست شده است؟ این به این دلیل است که گیت فایلی را دقیقا به همان صورتی که شما دستور git add را اجرا کردید، مرحله بندی می‌کند. اگر اکنون کامیت کنید، نسخه CONTRIBUTING.md که به کامیت خواهد رفت همان نسخه‌ای است که آخرین بار دستور git add را اجرا کردید، نه نسخه‌ای که در دایرکتوری کاری شما هنگام اجرای git commit وجود دارد.

اگر پس از اجرای git add فایلی را تغییر دهید، باید دوباره git add را اجرا کنید تا آخرین نسخه فایل را مرحله بندی کنید:

$ git add CONTRIBUTING.md
$ 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)

 new file: README
modified: CONTRIBUTING.md