Staging — ناحیه آمادهسازی در Git
مفهوم ناحیه Staging در گیت، دستور git add و تفاوت Working Directory، Staging Area و Repository.
ناحیه Staging چیست؟
Staging Area (ناحیه آمادهسازی یا Index) مفهوم کلیدی گیت است. این ناحیه مثل یک جای خالی برای عکس گروهی است: قبل از اینکه از پروژه «عکس» (کامیت) بگیرید، تصمیم میگیرید کدام تغییرات در عکس باشند — آنها را روی صحنه (Stage) میآورید.
سه ناحیه اصلی گیت
| ناحیه | توضیح | تشبیه |
|---|---|---|
| Working Directory | فایلهایی که الان روی سیستم دارید و ویرایش میکنید | میز کار شما |
| Staging Area | تغییراتی که برای کامیت بعدی انتخاب کردهاید | پشت دوربین عکس |
| Repository | تاریخچه دائمی کامیتها (پوشه .git) | آلبوم عکس |
جریان کار بین سه ناحیه
Working Directory --(git add)--> Staging Area --(git commit)--> Repository
دستور git add
برای آوردن تغییرات به ناحیه staging از git add استفاده میشود:
افزودن یک فایل خاص
git add hello.txt
افزودن چند فایل
git add hello.txt README.md app.py
افزودن همه تغییرات
git add .
.) یعنی «همه فایلها و تغییرات پوشه فعلی». این رایجترین شکل استفاده از git add است.
افزودن کل پوشه پروژه (از هر جای مخزن)
git add -A
بعد از git add چه میشود؟
فرض کنید hello.txt را اضافه کردهاید:
git add hello.txt
git status
خروجی:
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: hello.txt
حالا فایل در وضعیت Staged است و آماده کامیت! (کامیت را در مبحث بعدی یاد میگیریم)
برگرداندن فایل از Staging
اگر اشتباهاً فایلی را Stage کردید و پشیمان شدید:
git restore --staged hello.txt
این دستور فایل را از ناحیه staging برمیگرداند (به untracked یا modified برمیگردد) — به خود فایل دست نمیزند.
چرا ناحیه Staging اصلاً وجود دارد؟
سؤال خوبی است! چرا مستقیم کامیت نمیکنیم؟ دلیلش کنترل دقیق است:
- کامیتهای تمیز: فرض کنید ۵ فایل را ویرایش کردهاید که ۳ تای آنها مربوط به یک باگ و ۲ تای دیگر مربوط به قابلیت جدید است. با staging میتوانید آنها را در دو کامیت جدا ثبت کنید — تاریخچه خواناتر میشود.
- بررسی نهایی: قبل از کامیت، فرصت دارید یک بار دیگر ببینید دقیقاً چه چیزی وارد تاریخچه میشود.
- کامیت بخشی از تغییرات: حتی میتوانید بخشی از تغییرات داخل یک فایل را stage کنید (
git add -p)!
مثال عملی: دو کامیت جداگانه
# سه فایل ویرایش شدهاند: a.py (باگ)، b.py (باگ)، c.py (قابلیت جدید)
# کامیت اول: فقط فایلهای مربوط به باگ
git add a.py b.py
git commit -m "رفع باگ ورود کاربر"
# کامیت دوم: فایل قابلیت جدید
git add c.py
git commit -m "افزودن قابلیت جستجو"
خلاصه
- گیت سه ناحیه دارد: Working Directory، Staging Area و Repository
git addتغییرات را به ناحیه staging میآوردgit add .همه تغییرات را stage میکندgit restore --stagedفایل را از staging برمیگرداند- staging به شما اجازه میدهد کامیتهای کوچک و تمیز داشته باشید
این مبحث بخشی از دوره آموزش کامل Git است.