مقاله

Git و GitHub برای توسعه‌دهنده: commit، branch، merge، pull request، حل conflict و workflow تیمی — با دستورات روزمره در پروژه Laravel.

آموزش Git از صفر برای برنامه‌نویس‌ها — راهنمای عملی با مثال‌های واقعی

آموزش Git از صفر برای برنامه‌نویس‌ها — راهنمای عملی با مثال‌های واقعی

بدون Git تقریباً هیچ تیم توسعه حرفه‌ای کار نمی‌کند — و حتی در فریلنس solo، تاریخچه تغییرات، بازگشت به نسخه قبل و deploy امن بدون Git دردسر است. خیلی‌ها «Git می‌دانم» می‌گویند اما فقط add و commit بلدند؛ وقتی conflict در merge request پیش می‌آید، می‌ایستند. این راهنما برای برنامه‌نویسانی است که می‌خواهند همان روزی که روی پروژه Laravel استخدام می‌شوند، در GitHub مثل بقیه تیم حرکت کنند.

چرا Git برای برنامه‌نویس وب ضروری است؟

Git سیستم کنترل نسخه توزیع‌شده است: هر clone کپی کامل تاریخچه است. برای کارفرما، فعالیت GitHub = شواهد مهارت. برای خودتان، امکان experiment روی branch بدون ترس از خراب کردن main. Laravel خودش با Git سازگار است — .gitignore پیش‌فرض vendor و .env را نادیده می‌گیرد.

نصب و تنظیم اولیه

از git-scm.com نصب کنید. سپس:

git config --global user.name "Emran Jamshidi"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global core.autocrlf true

روی ویندوز autocrlf true خط انتهایی را مدیریت می‌کند. هویت commit باید با GitHub یکی باشد.

اولین repository

cd C:\xampp\htdocs\my-blog
git init
git status
git add .
git commit -m "Initial Laravel project setup"

قبل از add . مطمئن شوید .env در .gitignore است — Laravel این را پیش‌فرض دارد.

اتصال به GitHub

git remote add origin https://github.com/username/my-blog.git
git push -u origin main

احراز هویت: Personal Access Token به‌جای رمز (GitHub دیگر password نمی‌پذیرد). SSH key برای استفاده بلندمدت راحت‌تر است.

مدل ذهنی: commit، tree، branch

هر commit عکس لحظه‌ای از پروژه با hash منحصربه‌فرد است. Branch اشاره‌گر متحرک روی یک commit — معمولاً main خط تولید پایدار و feature/... برای کار جدید.

git log --oneline -10
git branch
git branch feature/contact-form
git switch feature/contact-form

در Git قدیمی‌تر checkout بود؛ switch واضح‌تر است.

Workflow روزمره در پروژه Laravel

  1. issue یا task را بخوانید
  2. از main به‌روز branch بزنید: git switch main && git pull && git switch -c feature/post-scheduler
  3. تغییرات کوچک و commitهای معنادار
  4. push و Pull Request
  5. Code review و merge

پیام commit واضح:

git commit -m "Add published_at filter to PostRepository"
# نه: "fix" یا "update"

مثال واقعی: فیچر Form Request

git switch -c feature/store-post-request
# ویرایش StorePostRequest.php و PostController
git add app/Http/Requests/StorePostRequest.php app/Http/Controllers/PostController.php
git commit -m "Validate post store input via Form Request"
git push -u origin feature/store-post-request

در GitHub PR باز کنید، توضیح دهید چرا و چطور تست شده.

ادغام (Merge) و conflict

وقتی دو نفر یک فایل را عوض کنند، merge conflict می‌آید:

git switch main
git pull
git switch feature/contact-form
git merge main
# اگر conflict:
# فایل را باز کنید، مارکرها را حل کنید
git add .
git commit -m "Resolve merge conflict with main"

ابزار VS Code ادغام بصری دارد. قانون: قبل از merge، branch را با main همگام کنید تا conflict کوچک‌تر بماند.

Rebase — کی و چرا؟

git rebase main تاریخچه را خطی‌تر می‌کند — قبل از merge PR در تیم‌هایی که rebase ترجیح می‌دهند. روی branch مشترک rebase نکنید مگر با هماهنگی. مبتدی: merge کافی است.

دستورات نجات‌بخش

git stash          # ذخیره موقت تغییرات
git stash pop
git diff           # تفاوت unstaged
git diff --staged
git restore file.php   # بازگردانی فایل
git reset --soft HEAD~1  # حذف آخرین commit نگه داشتن تغییرات

reset --hard مخرب است — فقط وقتی مطمئنید.

.gitignore در Laravel

vendor، node_modules، .env، storage/logs — commit نشوند. فایل build فرانت (public/build) بسته به deploy strategy گاهی در repo است.

اشتباهات رایج

commit کردن .env یا API key. commitهای غول‌آسا (هزار خط). کار روی main مستقیم در تیم. push --force روی main (ممنوع). عدم pull قبل از شروع روز.

Git با استقرار

روی سرور: git pull origin main سپس composer install --no-dev و php artisan migrate --force. برای production از GitHub Actions در مقالات DevOps می‌خوانیم.

ارتباط با مسیر شغلی

در رودمپ برنامه‌نویسی وب Git در فاز سه آمده. مصاحبه‌ها گاهی «rebase vs merge» یا «چطور conflict حل کردید» می‌پرسند — تجربه واقعی بگویید.

جمع‌بندی

Git مهارت عضله‌ای است: روزی چند commit در پروژه شخصی. branch، PR، و حل conflict را حداقل یک‌بار عمدی تمرین کنید. برای پروژه تیمی Laravel، اصول معماری تمیز کنار Git استاندارد حرفه‌ای را می‌سازد. سوال دارید؟ تماس.