Nikode
ابزارها و گیت

راهنمای کامل Git و GitHub

یک راهنمای جامع، گام‌به‌گام و دوستانه برای یادگیری Git و GitHub — از مفاهیم پایه تا بهترین شیوه‌ها و سناریوهای واقعی.

چرا Git و GitHub مهم هستند؟

  • Git: یک سیستم کنترل نسخه توزیع‌شده (Distributed Version Control System). این ابزار به شما اجازه می‌دهد تغییرات در کد را ردیابی کنید، به نسخه‌های قبلی بازگردید و روی ویژگی‌های مختلف به صورت ایزوله کار کنید.
  • GitHub: یک پلتفرم آنلاین برای میزبانی repositoryهای Git. به کمک آن می‌توانید با دیگران همکاری کنید، تغییرات را به اشتراک بگذارید، Pull Request بزنید و فرآیند توسعه را حرفه‌ای مدیریت کنید.

بدون Git و GitHub، کار گروهی روی پروژه‌ها بسیار پرریسک و گیج‌کننده می‌شود.


نصب Git

  1. وارد git-scm.com شوید.
  2. Git را برای سیستم عامل خود دانلود و با تنظیمات پیش‌فرض نصب کنید.
  3. نصب را بررسی کنید:
git --version


---

## پیکربندی اولیه Git

قبل از استفاده، باید هویت خود را تعریف کنید (برای commit ها):

```bash
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"

برای بررسی تنظیمات:

git config --list

📌 چرا لازم است؟ چون هر commit باید مشخص کند چه کسی آن را انجام داده است.


ایجاد اولین Repository محلی

  1. یک پوشه برای پروژه بسازید:
mkdir my-first-project
cd my-first-project
  1. Git را در آن فعال کنید:
git init
  1. یک فایل ابتدایی اضافه کنید:
echo "# My First Project 🚀" > README.md
  1. تغییرات را ذخیره کنید:
git add .
git commit -m "first commit"

📌 چرا لازم است؟ با این کار تغییرات پروژه ثبت و قابل بازگشت می‌شوند.


اتصال به GitHub

  1. وارد github.com شوید و یک New Repository بسازید.
  2. آن را به پروژه محلی متصل کنید:
git remote add origin <github-repository-address>
git push -u origin main

📌 چرا لازم است؟ تا بتوانید کد را به اشتراک بگذارید و با دیگران همکاری کنید.


کار با Branch ها

Branchها اجازه می‌دهند روی ویژگی‌های جدید کار کنید بدون اینکه کد اصلی خراب شود.

# ایجاد branch جدید
git checkout -b feature/login

# جابجایی بین branch ها
git checkout main

# ادغام branch با main
git merge feature/login

# حذف branch
git branch -d feature/login

مدیریت تعارض‌ها (Merge Conflicts)

وقتی دو نفر روی یک خط از کد تغییر می‌نویسند، Git نمی‌داند کدام درست است. به همین دلیل فایل با نشانه‌گذاری conflict باز می‌شود.

بعد از ویرایش و رفع تعارض:

git add .
git commit -m "resolve merge conflict"

📌 چرا لازم است؟ همکاری واقعی همیشه پر از تعارض‌هاست — یادگیری مدیریت آن‌ها حیاتی است.


دستورات پیشرفته Git

مشاهده تاریخچه و تغییرات:

git log --oneline
git show <commit-hash>
git diff main..<branch-name>

بازگردانی تغییرات:

git checkout -- <file>
git reset --hard <commit-hash>
git reset --soft <commit-hash>

ذخیره تغییرات موقت (Stash):

git stash
git stash list
git stash pop
git stash drop

Tag کردن نسخه‌ها:

git tag v1.0.0
git tag -a v1.0.0 -m "version 1.0.0"
git tag
git push origin --tags

📌 چرا لازم است؟ برای مدیریت نسخه‌ها (release ها) و بازگشت به یک نقطه مشخص در آینده.


بهترین شیوه‌ها

نوشتن پیام Commit خوب

# خوب
git commit -m "feat: add authentication system"

# بهتر
git commit -m "feat: add authentication system with JWT

- Add authentication middleware
- Implement login/logout API
- Add validation for forms"

انواع Commit بر اساس Conventional Commits

  • feat: → ویژگی جدید
  • fix: → رفع باگ
  • docs: → تغییرات مستندات
  • style: → تغییرات ظاهری (بدون تغییر در منطق)
  • refactor: → بازنویسی کد بدون تغییر عملکرد
  • test: → اضافه کردن تست
  • chore: → کارهای نگهداری

کار با Remote ها

# اضافه کردن remote جدید
git remote add upstream https://github.com/original/repo.git

# مشاهده remote ها
git remote -v

# دریافت تغییرات
git fetch origin
git pull origin main
git fetch upstream

حل مشکلات رایج

فراموش کردن فایل در Commit

git add forgotten-file
git commit --amend --no-edit

تغییر پیام آخرین Commit

git commit --amend -m "new message"

بازگردانی فایل حذف شده

git log --diff-filter=D --summary
git checkout <commit-hash> -- path/to/file

کار با GitHub

Fork کردن پروژه

  • روی پروژه → Fork → کپی در حساب خود

Pull Request

  • تغییرات را در branch جدا انجام دهید
  • Push کنید و روی New Pull Request بزنید

Issues

  • برای گزارش باگ‌ها
  • برای درخواست ویژگی جدید
  • برای پرسیدن سوال یا بحث

تمرین‌های عملی

  1. یک repository بسازید و آن را clone کنید. فایل اضافه کنید، commit کنید و push کنید.
  2. Branch جدید بسازید، تغییرات بدهید و merge کنید.
  3. یک conflict بسازید و آن را حل کنید.
  4. سناریوی همکاری تیمی را شبیه‌سازی کنید.
  5. stash، tag و log را تمرین کنید.

نکات پیشرفته

Git Hooks

ls .git/hooks/
touch .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

Git Aliases

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

Git Workflows

  1. Feature Branch Workflow → برای پروژه‌های کوچک
  2. Gitflow Workflow → برای تیم‌های بزرگ با release management
  3. Trunk-Based Development → برای تیم‌های سریع و پروژه‌های بزرگ

🎯 نقطه بررسی نهایی: پس از این راهنما شما می‌توانید repository بسازید، branch ها را مدیریت کنید، تغییرات را commit کنید، با GitHub همکاری کنید و مثل حرفه‌ای‌ها conflict ها را حل کنید.

منابع مفید