Git

از Elina
نسخهٔ تاریخ ۶ سپتامبر ۲۰۲۶، ساعت ۰۸:۰۷ توسط Elina (بحث | مشارکت‌ها)
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

گیت (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 برای ترکیب تغییرات یک 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 = میزبانی و همکاری آنلاین