راهنمای سادۀ گیت (git)

مقدمه‌ای برای شروع کار با گیت

توییت

توسط Roger Dudler
با تشکر از @tfnico، @fhd و Namics
ترجمه فارسی توسط @hamed
سپاس از آقای راستی کردار @rastikerdar بابتِ فونت زیبای وزیر
نمایش این راهنما به زبانِ english، deutsch، español، français، indonesian، italiano، nederlands، polski، português، русский، türkçe،
မြန်မာ، 日本語، 中文، 한국어، Vietnamese، فارسی
لطفاً مشکلات ترجمه فارسی را در گیت‌هاب گزارش دهید

نصب

دانلود گیت برای مک

دانلود گیت برای ویندوز

دانلود گیت برای لینوکس

ساخت مخزن جدید

پوشۀ جدیدی بسازید؛ واردش شوید و دستورِ
git init
را اجرا کنید تا یک مخزن جدید (Git Repository) ساخته شود.

دریافت مخزن (Checkout)

با اجرای دستور زیر می‌توانید یک نسخۀ کپی از مخزن محلی ایجاد کنید
کپی یا کلون: git clone /path/to/repository
برای کپیِ مخزنی که در سرور قرار گرفته دستور پایین را اجرا کنید:
git clone username@host:/path/to/repository

گردش کار (Workflow)

مخزن محلی شامل سه «درخت» است که توسط گیت نگهداری می‌شود: اولی Working Directory است که مسئول نگه‌داری فایل‌های واقعی پروژه است؛ دومی ایندکس (Index) است که نقش منطقه شروع عملیات (Staging area) را بازی می‌کند؛ و آخری هِد (HEAD) که به آخرین کامیتِ ارسالی (commit) اشاره می‌کند.

اضافه کردن و کامیت

می‌توانید با دستور زیر فایل‌ها را به ایندکس اضافه کنید:
git add <filename>
git add *
این اولین قدمِ یک گردش کار ساده در گیت محسوب می‌شود. برای ارسال واقعی تغییرات از دستور پایین استفاده کنید:
git commit -m "Commit message"
اکنون فایل‌های مورد نظر در هِد قرار گرفته‌اند؛ ولی هنوز به سرور ارسال نشده‌اند.

ارسال تغییرات (Push)

برای ارسال تغییرات به سرورِ ریموت دستور زیر را اجرا کنید:
git push origin master
به جای مَستر (master)، اسم شاخه‌ای (branch) را وارد کنید که می‌خواهید تغییراتش را ارسال کنید.

اگر هیچ مخزن محلی‌ای را کلون نکرده بودید می‌توانید با دستور پایین مخزن محلی‌تان را به مخزن ریموت متصل کنید:
git remote add origin <server>
حالا می‌توانید تغییرات را به کمک ریموت ساخته شده به سرور ارسال نمایید.

شاخه‌بندی (Branching)

شاخه‌ها برای افزودن فیچرهای جدید در مسیری مجزا به کار می‌روند. هنگام ساخت یک مخزن جدید، شاخۀ مستر به عنوان شاخۀ پیش‌فرض در نظر گرفته می‌شود. هر شاخه به صورت مجزا توسعه می‌یابد و بعد از اتمام کار با شاخۀ مستر ترکیب می‌شود.

با دستور زیر شاخه‌ای به نام "feature_x" ساخته شده و به آن سوئیچ می‌شود:
git checkout -b feature_x
بازگشت به شاخۀ مستر:
git checkout master
حذف شاخه:
git branch -d feature_x
تا زمانی که شاخه‌ای را به سرور پوش نکنید، سایر افراد به آن دسترسی ندارند. git push origin <branch>

بروزرسانی و ادغام

برای اینکه مخزن محلی خود را به آخرین کامیت بروز کنید، دستور
git pull
را در پوشه محلی (فولدر پروژه روی سیستم‌تان) اجرا کنید تا تغییرات مخزن ریموت (واقع روی سرور)،
دریافت (fetch) و ادغام (merge) شوند. برای ادغام یک شاخۀ دیگر با شاخۀ کنونی (مثلاً master)، از دستور زیر استفاده کنید:
git merge <branch>
گیت در هر دو حال تلاش می‌کند تغییرات را به صورت خودکار ادغام کند ولی این کار همیشه میسر نیست چون ممکن است به تداخل (conflict) منجر شود. تداخل‌ها را باید خودتان به صورتی دستی برطرف نمایید و سپس عمل ادغام را انجام دهید. پس از ویرایش باید با دستور زیر، آن‌ها را به عنوان «ادغام شده» علامت بزنید:
git add <filename>
قبل از ادغام تغییرات، پیش‌نمایش آن را می‌توانید با دستور زیر ببینید
git diff <source_branch> <target_branch>

برچسب‌گذاری

معمولاً به هر نسخه از برنامه، شماره‌ای اختصاص می‌دهند که در گیت به آن تگ گفته می‌شود. این موضوع در سایر سیستم‌های کنترل نسخه مانند ساب‌ورژن (SVN) نیز وجود دارد.
می‌توانید با دستور زیر برچسبی به نام 1.0.0 بسازید:
git tag 1.0.0 1b2e1d63ff
عبارت 1b2e1d63ff، اولین ده کاراکتر شناسۀ (ID) کامیتی است که می‌خواهید برچسب‌گذاری کنید. می‌توانید شناسه کامیت را با جستجو در لاگ پیدا کنید...

لاگ

در ساده‌ترین حالت، تاریخچه مخزن با دستور زیر نمایش داده می‌شود:
git log
می‌توانید کلی پارامتر دیگر هم به این دستور اضافه کنید تا بشود آن چیزی که می‌خواهید. دیدن کامیت‌های یک شخص خاص:
git log --author=bob
دیدن کامیت‌ها به صورت مختصر؛ هر کدام در یک خط:
git log --pretty=oneline
یا شاید بخواهید درخت اسکی (ASCII) همه شاخه‌ها را که با نام شاخه و برچسب‌ها تزئین شده ببینید:
git log --graph --oneline --decorate --all
فقط مشاهدۀ فایل‌های تغییر یافته:
git log --name-status
موارد بالا فقط گوشه‌ای از پارامترها بودند. برای اطلاعات بیشتر، دستور پایین را وارد کنید:
git log --help

جایگزین کردن تغییرات محلی

در صورتی که مرتکب اشتباهی شدید، تغییرات محلی را می‌توانید با دستور پایین جایگزین کنید:
git checkout -- <filename>
این دستور، تغییرات working directory (فولدر پروژه روی سیستم) را با آخرین محتوایی که هِد به آن اشاره می‌کند جایگزین می‌کند. البته فایل‌های جدید و تغییراتی که از قبل به ایندکس اضافه شده، دست نخورده باقی می‌مانند.

اگر می‌خواهید همه تغییرات محلی را حذف و بعد کامیت کنید، آخرین تاریخچه را از سرور دریافت و با دستور ریست (با پرچم hard--) شاخه مستر را به آخرین تغییرات دریافتی از سرور اشاره دهید.
git fetch origin
git reset --hard origin/master

نکات مفید

رابط گرافیکی گیت git:
gitk
نمایش خروجی دستورات به صورت رنگی:
git config color.ui true
نمایش مختصر لاگ، تنها یک کامیت در هر سطر:
git config format.pretty oneline
افزودن فایل‌ها به صورت تعاملی:
git add -i

منابع و پیوندها

کلاینت‌های گرافیکی گیت

آموزشِ گیت

درخواست کمک