Git
گیت (Git)
Git یک سیستم کنترل نسخه (Version Control System) است که برای مدیریت تغییرات فایلها و پروژهها استفاده میشود. Git به برنامهنویسان و تیمهای توسعه کمک میکند تا تغییرات پروژه را ثبت کنند، به نسخههای قبلی برگردند و همزمان روی یک پروژه کار کنند.
Git بیشتر در پروژههای برنامهنویسی، طراحی سایت و توسعه نرمافزار استفاده میشود.
Git چه کاربردی دارد؟
مهمترین کاربردهای Git عبارتاند از:
- ثبت تغییرات فایلها و پروژه
- مشاهده تاریخچه تغییرات
- بازگشت به نسخههای قبلی
- ایجاد شاخههای مختلف برای توسعه قابلیتهای جدید
- ادغام تغییرات چند شاخه
- همکاری چند نفر روی یک پروژه
- اتصال پروژه به سرویسهایی مانند GitHub، GitLab و Bitbucket
- نگهداری نسخههای مختلف یک پروژه
مفاهیم اصلی Git
قبل از یادگیری دستورات Git بهتر است چند مفهوم اصلی را بشناسیم.
Repository
مخزن یا Repository محلی است که Git اطلاعات مربوط به پروژه و تاریخچه تغییرات آن را نگهداری میکند.
یک Repository میتواند روی کامپیوتر یا روی سرویسهایی مانند GitHub قرار داشته باشد.
Commit
هر بار که مجموعهای از تغییرات را در Git ثبت میکنیم، یک Commit ایجاد میشود.
هر Commit مانند یک نقطه در تاریخچه پروژه است و میتوان اطلاعات تغییرات انجامشده را در آن مشاهده کرد.
Branch
Branch یا شاخه به ما اجازه میدهد بدون تغییر مستقیم نسخه اصلی پروژه، روی یک قابلیت یا تغییر جدید کار کنیم.
برای مثال میتوان یک Branch برای توسعه قابلیت جدید و یک Branch برای نسخه اصلی پروژه داشت.
Merge
از Merge برای ترکیب تغییرات یک Branch با Branch دیگر استفاده میشود.
Remote
Remote به یک Repository که در یک محل دیگر، معمولاً روی اینترنت، قرار دارد گفته میشود.
برای مثال Repository موجود در GitHub میتواند Remote پروژه محلی ما باشد.
دستورات پایه Git
git init
برای تبدیل یک پوشه به Repository از دستور زیر استفاده میشود:
git init
بعد از اجرای این دستور، Git یک پوشه مخفی با نام .git ایجاد میکند.
این پوشه اطلاعات مربوط به تاریخچه و تنظیمات Repository را نگهداری میکند.
git status
برای مشاهده وضعیت فعلی پروژه استفاده میشود:
git status
این دستور نشان میدهد:
- چه فایلهایی تغییر کردهاند
- چه فایلهایی برای Commit آماده شدهاند
- چه فایلهایی هنوز توسط Git دنبال نمیشوند
- در حال حاضر روی چه Branch ای قرار داریم
git add
برای اضافه کردن تغییرات به مرحله آمادهسازی (Staging Area) استفاده میشود.
برای اضافه کردن یک فایل:
git add index.html
برای اضافه کردن چند فایل:
git add index.html style.css script.js
برای اضافه کردن تمام تغییرات:
git add .
git commit
برای ثبت تغییرات آمادهشده در تاریخچه Git استفاده میشود:
git commit -m "Add homepage"
عبارت داخل -m توضیح کوتاهی درباره تغییرات Commit است.
بهتر است پیام Commit کوتاه، واضح و مرتبط با تغییرات باشد.
git log
برای مشاهده تاریخچه Commitها استفاده میشود:
git log
برای نمایش خلاصهتر:
git log --oneline
مثلاً:
a83f21a Add homepage
52bc91d Fix navigation
19ac742 Initial commit
کار با Branch
مشاهده Branchها
برای مشاهده Branchهای موجود:
git branch
ایجاد Branch جدید
git branch feature-login
در این حالت یک Branch جدید ایجاد میشود.
تغییر Branch
git switch feature-login
همچنین در نسخههای قدیمیتر Git میتوان از دستور زیر استفاده کرد:
git checkout feature-login
ایجاد و ورود همزمان به Branch
git switch -c feature-login
این دستور یک Branch جدید ایجاد کرده و بلافاصله وارد آن میشود.
حذف Branch
git branch -d feature-login
اگر Branch هنوز Merge نشده باشد، Git ممکن است از حذف آن جلوگیری کند.
اتصال Git به GitHub
برای اتصال Repository محلی به یک Repository روی GitHub معمولاً ابتدا Remote اضافه میشود:
git remote add origin https://github.com/USERNAME/REPOSITORY.git
برای مشاهده Remoteهای موجود:
git remote -v
ارسال تغییرات به Remote
برای ارسال Branch به Repository آنلاین:
git push origin main
در بسیاری از پروژهها Branch اصلی با نام main است.
برای اینکه Branch محلی برای Pushهای بعدی به Remote متصل شود:
git push -u origin main
پس از تنظیم اولیه، معمولاً میتوان از:
git push
استفاده کرد.
دریافت تغییرات از Remote
git pull
برای دریافت تغییرات جدید و ادغام آنها با Branch فعلی:
git pull
یا:
git pull origin main
git fetch
برای دریافت اطلاعات و تغییرات Remote بدون ادغام مستقیم آنها:
git fetch
تفاوت مهم این دو دستور این است که fetch تغییرات را دریافت میکند ولی آنها را به Branch فعلی Merge نمیکند؛ در حالی که pull معمولاً دریافت و ادغام تغییرات را با هم انجام میدهد.
برگرداندن تغییرات
git restore
اگر فایلی را تغییر دادهای ولی هنوز آن را Commit نکردهای، میتوانی تغییرات آن را کنار بگذاری:
git restore index.html
برای خارج کردن یک فایل از Staging Area:
git restore --staged index.html
git revert
برای ایجاد یک Commit جدید که اثر یک Commit قبلی را برعکس میکند:
git revert COMMIT_ID
این روش معمولاً برای برگرداندن تغییرات در پروژههایی که تاریخچه آنها به اشتراک گذاشته شده مناسبتر است.
git reset
git reset میتواند HEAD و وضعیت Staging را تغییر دهد.
برای مثال:
git reset HEAD~1
این دستور آخرین Commit را از حالت Commit خارج میکند، در حالی که تغییرات فایلها باقی میمانند.
دستور reset بهخصوص در حالتهای پیشرفته باید با دقت استفاده شود.
مشاهده تفاوت تغییرات
برای مشاهده تغییراتی که هنوز Commit نشدهاند:
git diff
برای مشاهده تفاوت بین دو Commit:
git diff COMMIT1 COMMIT2
کار با فایلهای نادیده گرفتهشده
گاهی نمیخواهیم بعضی فایلها وارد Repository شوند.
برای این کار از فایل .gitignore استفاده میشود.
برای مثال:
node_modules/
.env
*.log
در این مثال:
- پوشه
node_modulesنادیده گرفته میشود. - فایل
.envنادیده گرفته میشود. - فایلهای دارای پسوند
.logنادیده گرفته میشوند.
دستورات مهم Git در یک جدول
| دستور | کاربرد |
|---|---|
git init |
ایجاد Repository |
git status |
مشاهده وضعیت پروژه |
git add |
اضافه کردن تغییرات به Staging |
git commit |
ثبت تغییرات |
git log |
مشاهده تاریخچه |
git branch |
مدیریت Branchها |
git switch |
تغییر Branch |
git merge |
ادغام Branchها |
git remote |
مدیریت Remote |
git clone |
کپی کردن یک Repository |
git push |
ارسال تغییرات به Remote |
git pull |
دریافت و ادغام تغییرات |
git fetch |
دریافت اطلاعات Remote بدون Merge |
git diff |
مشاهده تفاوت تغییرات |
git restore |
برگرداندن تغییرات فایل |
git revert |
معکوس کردن یک Commit |
git reset |
تغییر وضعیت Commit/Stage |
git tag |
ایجاد Tag برای نسخهها |
یک مثال عملی
فرض کنید یک سایت HTML ساختهایم و میخواهیم آن را با Git مدیریت کنیم.
ابتدا وارد پوشه پروژه میشویم:
cd my-website
سپس Repository را ایجاد میکنیم:
git init
وضعیت پروژه را بررسی میکنیم:
git status
فایلها را به Staging اضافه میکنیم:
git add .
اولین Commit را ایجاد میکنیم:
git commit -m "Initial website"
حالا اگر فایل index.html را تغییر دهیم، میتوانیم تغییرات را مشاهده کنیم:
git diff
سپس تغییرات را ثبت میکنیم:
git add index.html
git commit -m "Update homepage"
به این ترتیب Git تاریخچه تغییرات سایت را نگهداری میکند.
روند معمول کار با Git
در بسیاری از پروژهها روند کار به شکل زیر است:
تغییر فایلها
↓
git status
↓
git add
↓
git commit
↓
git push
اگر پروژه دارای Repository آنلاین باشد، برای دریافت تغییرات جدید معمولاً ابتدا:
git pull
اجرا میشود.
نکته مهم
Git و GitHub یکی نیستند.
- Git یک سیستم کنترل نسخه است که روی کامپیوتر اجرا میشود.
- GitHub یک سرویس آنلاین برای میزبانی Repositoryهای Git و همکاری روی پروژههاست.
به زبان ساده:
- Git = مدیریت نسخهها
- GitHub = میزبانی و همکاری آنلاین