خلاصه:‌ برای مشاهده‌ی وضعیتِ working directory از git status استفاده می‌کنیم. فایل یا فایل‌ها یا هر چیزی (period) که جدیده و یا تغییر داده شده رو با دستورِ git add به staging area می‌بریم.


بیایین چند تا فایل به پروژه‌مون اضافه کنیم. برای این کار از دستورِ استانداردِ یونیکس/لینوکس echo استفاده می‌کنیم. این دستور برای نوشتنِ محتوا در فایل استفاده می‌شه.

echo hello > file1.txt
echo hello > file2.txt

حالا دو تا فایلِ جدید در پروژه‌مون داریم که هنوز توسطِ‌ گیت track نشدن. زمانی که برای اولین بار ریپویِ گیت در پروژه‌تون init می‌کنید گیت بصورتِ اتوماتیک فایل‌ها رو track نمی‌کنه. حالا اگه هزارتا فایل هم در پروژه‌تون باشه باید به گیت بگین که اون فایل‌ها رو track کنه.

با دستورِ زیر وضعیتِ Working Directory یا دایرکتوریِ کاری‌مون رو در staging area چک کنیم.

git status

خروجیِ دستورِ git status رو در زیر می‌بینید.

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        file1.txt
        file2.txt

nothing added to commit but untracked files present (use "git add" to track)

هیچ کامیتی هنوز نداریم. یه سری فایل‌هایِ Untracked داریم. چون هنوز این فایل‌ها در staging area نیستن. برای این کار از دستورِ زیر به چهار طریق می‌تونیم استفاده می‌کنیم.

git add file1.txt
git add file2.txt
git add file1.txt file2.txt
git add *.txt
git add .

در استفاده کردن از period یا نقطه (که بصورتِ recursively کل فایل‌هایِ‌ پروژه رو اَد می‌کنه) کمی باید هُشیار باشید چون بعضاً فایل‌هایی هست که نمی‌خواین به ریپو اضافه کنین. مثلاً فایل‌هایِ بزرگ مثلِ فایل‌هایِ باینری بزرگ یا فایل‌هایِ log. چون سایز ریپو رو بیشتر می‌کنن. بعداً نحوه‌ی ignore کردنِ چنین فایل‌هایی رو یاد خواهیم گرفت.

حالا با دستورِ بالا فایل‌هامون رو در staging area قرار دادیم و آماده برایِ commit شدن هستن.

حالا اگه دوباره git status کنیم مشاهده‌ خواهیم کرد که این دو فایل در Staging area قرار گرفتن.

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   file1.txt
        new file:   file2.txt

دوباره با دستورِ زیر فایلِ file1.txt رو تغییرش می‌کنیم. علامتِ << به معنایِ append کردنِ محتواست.

echo world >> file1.txt

و حالا دوباره git status می‌کنیم.

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   file1.txt
        new file:   file2.txt

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:   file1.txt

با توجه به وضعیتِ بالا، دو فایل رو در staging area داریم و یک فایلِ modified هم در دایرکتوریِ کاری‌مون داریم. شاید بپرسید اما ما قبلاً file1.txt رو به staging area اضافه کردیم. آره. ولی وقتی که دستورِ add رو اجرا کردین گیت یک snapshot از file1.txt گرفت و اون snapshot رو به staging area اضافه‌ش کرد.

حالا در staging area اولین نسخه‌ی file1.txt رو داریم. تغییراتی رو که در file1.txt انجام شده هنوز stage نشدن. پس چیزی که الان داخلِ مسیر‌ کاری‌مون یا Working directory داریم دومین نسخه از این فایله. یه سری تغییرات داشته که هنوز stage نشدن. پس یک از دو کارِ زیر رو می‌کنیم.

git add file1.txt
git add .

دوباره git status می‌کنیم تا به مسیرِکاری‌مون یه نگاهی بندازیم.

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   file1.txt
        new file:   file2.txt

حالا هر دویِ فایل‌ها در staging area هستن و ما هیچ تغییرِ unstageای نداریم. در قدمِ بعدی می‌خوایم که نشونتون بدم که چطور این snapshot رو به صورتِ‌ دائم commit کنین تا داخلِ ریپوی گیت‌مون ذخیره شه.