گیت (Git) یک سیستم کنترل نسخه توزیع شده (Distributed Version Control System – DVCS) است که به توسعهدهندگان نرمافزار اجازه میدهد تا بر روی پروژههای نرمافزاری به صورت مشترک کار کنند. گیت توسط لینوس توروالدز، خالق لینوکس، در سال 2005 توسعه یافت. این ابزار به توسعهدهندگان امکان میدهد تا نسخههای مختلف یک پروژه نرمافزاری را به صورت محلی و روی سرورهای ریموت مدیریت کنند، تغییرات را پیگیری کنند، به نسخههای قبلی بازگردند و تغییرات مختلف را با دیگران ادغام کنند.
کمتر تیم توسعهای وجود دارد که این روزها با گیت آشنایی نداشته باشد و یا از آن استفاده نکند. مطابق با نظرسنجیهای Stackoverflow در سال ۲۰۲۳ ۹۳ درصد توسعهدهندگان از گیت استفاده میکنند.
از آنجایی که در استفادههای روزمره از Git معمولا از چند دستور اصلی بیشتر از تمام موارد دیگر استفاده میشود، در این مطلب از وبلاگ همروش سعی داریم تا شما را با این دستورات آشنا کنیم.
دستور اول: git clone
از دستور Git clone برای دانلود یک مخزن استفاده میشود. با استفاده از Git clone میتوانید یک کپی از آخرین نسخه پروژه مورد نظر را روی کامپیوتر یا محیط توسعه خود ذخیره کنید.
سادهترین روش برای انجام این کار استفاده از آدرس ریپازیتوری یا مخزن مورد نظر بعد از دستور git clone است:
git clone <https://name-of-the-repository-link>
اگر ریپازیتوری مورد نظر روی گیتهاب قرار دارد میتوانید برای دریافت آدرس آن وارد صفحه اصلی پروژه شده و روی گزینه Clone Or Download (دکمه سبز رنگ) کلیک کنید. در مرحله بعد یک آدرس در اختیار شما قرار میگیرد، آن را کپی کرده و بعد از دستور git clone آن را Paste کنید.
![کلون کردن ریپازیتوری](https://blog.hamravesh.com/blog/wp-content/uploads/2024/01/github-clone-hamravesh.png)
دستور دوم: git branch
Branch یا شاخه یکی از امکانات بسیار مهم دنیای Git به حساب میآید. با استفاده از قابلیت برنچها، میتوانید با اعضای تیمتان به صورت همزمان روی یک مخزن کار کرده و پروژه را به صورت موازی توسعه دهید. برای استفاده از این قابلیت سه دستور برای ایجاد، لیست کردن و حذف کردن برنچها وجود دارد.
ایجاد برنچ جدید
برای ایجاد برنچ جدید کافیست بعد از دستور git branch نام آن را وارد کنید.
git branch <branch-name>
این دستور برنچ را به صورت محلی روی مخزنتان ایجاد میکند. برای Push کردن یا انتقال آن به ریپازیتوری ریموت خود (برای مثال ریپازیتوری مربوطه روی گیتهاب) میتوانید از دستور زیر استفاده کنید.
git push -u <remote> <branch-name>
مشاهده لیست برنچها
برای مشاهده لیست برنچها میتوانید از دو دستور زیر استفاده کنید:
git branch
git branch --list
حذف کردن برنچ
برای حذف کردن برنچ کافیست فلگ -d و نام برنچ مورد نظر را وارد کنید:
git branch -d <branch-name>
دستور سوم: git checkout
حال که چند برنچ را برای پروژهمان ایجاد کردیم، نیاز است که بین آنها سوئیچ کنیم. برای انجام این کار میتوانیم از checkout استفاده کنیم.
git checkout <name-of-your-branch>
البته قبل از وارد کردن این دستور نیاز است که به دو نکته توجه کنید:
- قبل از سوئیچ کردن به یک برنچ دیگر، نیاز است که تغییرات مربوط به برنچ کنونیتان را کامیت کنید.
- برنچی که قصد ورود به آن را دارید باید در محیط لوکال وجود داشته باشد.
یک دستور میانبر نیز برای ایجاد سریع برنچ و همچنین سوئیچ کردن به آن وجود دارد که در زیر آن را مشاهده میکنید:
git checkout -b <name-of-your-branch>
دستور چهارم: git status
با استفاده از دستور git status میتوانید تمام اطلاعات ضروری مربوط به برنچ کنونیتان را مشاهده کنید:
git status
با استفاده از این دستور میتوانیم اطلاعات زیر را دریافت کنیم:
- آیا برنچ کنونی آپدیت است؟
- آیا نیازی به کامیت، پوش (Push) یا پول (Pull) وجود دارد؟
- آیا فایلی در وضعیتهای Stage یا Track قرار گرفته؟
- آیا فایل جدیدی ایجاد، ویرایش و یا حذف شده؟
![گیت Status - همروش](https://blog.hamravesh.com/blog/wp-content/uploads/2024/01/status-git-hamravesh.png)
دستور پنجم: git add
پس از ایجاد هرگونه تغییر اعم از ایجاد فایل جدید، ویرایش و حذف فایلها، تا زمانی که آنها را به گیت معرفی نکنید، تغییری روی ریپازیتوری اعمال نمیشوند.
این فایلها به عنوان فایلهای unstaged در نظر گرفته میشوند. فایلهایی که تغییر کردهاند اما هنوز به گیت معرفی نشدهاند. برای معرفی این تغییرات جدید نیاز است که از دستور git add
استفاده کنید.
برای یک فایل میتوانید دستور زیر را وارد کنید:
git add <file>
اگر هم قصد دارید چندین فایل را به صورت همزمان اضافه کنید، میتوانید از دستور زیر استفاده کنید:
git add -A
دستور ششم: git commit
بعد از افزودن فایلها با استفاده از git add
نیاز است که برای اضافه شدن آنها به ریپازیتوری مورد نظر، عملیات کامیت را انجام دهید. برای این کار از دستور git commit
استفاده خواهیم کرد.
git commit -m "commit message"
در ساختار دستور کامیت، میتوانیم برای هر کامیت یک پیام در نظر بگیریم. برای مثال: index.html file updated. این پیام باید کوتاه و جامع باشد، به این معنا که تغییرات جدید را توضیح دهد.
با هر کامیت، یک نقطه جدید از توسعه شروع میشود که شما در فرایند ساخت ریپازیتوریتان میتوانید به آن بازگردید. همچنین این موضوع را در نظر بگیرید که تمام این کارها تنها روی محیط لوکال شما تغییرات را اعمال میکند. برای اعمال تغییرات روی ریپازیتوریهای ریموت نیاز است که از دستور git push
استفاده کنید.
دستور هفتم: git push
بعد از کامیت تغییرات، حال نیاز است که برنچ مربوطه را به یک ریپازیتوری ریموت ارسال کنید. برای انجام این کار میتوانید از دستور git push استفاده کنید:
git push <remote> <branch-name>
این نکته را نیز در نظر داشته باشید که اگر برنچ مربوطه به تازگی ساخته شده و در ریپازیتوری ریموت شما وجود ندارد ابتدا باید برنچ را Push کرده (دستور زیر) و سپس عملیات بالا را انجام دهید:
git push -u origin <branch_name>
به عنوان یک موضوع مهم باید بگوییم که git push تنها تغییراتی را به ریپازیتوری ریموت شما ارسال میکند که قبلا کامیت شدهاند.
دستور هشتم: git pull
از دستور git pull
برای دریافت بهروزرسانیهای مربوط به ریپازیتوری ریموت استفاده میشود. برای مثال اگر به صورت تیمی روی یک مخزن در گیتهاب کار میکنید و حال قصد دارید تغییراتی که همتیمیتان روی مخزن اعمال کردهاند را به محیط لوکال خود بیاورید، باید از این دستور استفاده کنید.
این دستور ترکیبی از دو دستور git fetch و git merge است. به این معنا که ابتدا ریپازیتوری مربوطه دانلود/دریافت میشود و سپس تغییرات جدید را با ریپازیتوری شما در محیط لوکال همگام میکند.
git pull <remote>
در برخی از مواقع استفاده از این دستور میتواند منجر به برخی ناسازگاریها و تناقضها شود که نیاز است به صورت دستی آنها را حل کنید.
دستور نهم: git revert
اگر به برگشت به مرحله قبلی یا خنثی کردن یکسری از تغییرات نیاز داشته باشید (مانند استفاده از CTRL+Z) میتوانید از دستور git revert
استفاده کنید.
با استفاده از این دستور میتوانید به کامیتهای قبلی که روی ریپازیتوری اعمال کردهاید بازگردید. برای این کار ابتدا با استفاده از دستور زیر تاریخچه کامیتهای اعمال شده را لیست کنید:
git log –oneline
![دریافت لیستی از کامیتها](https://blog.hamravesh.com/blog/wp-content/uploads/2024/01/git-revert-log-hamravesh.png)
در مرحله بعدی نیاز است که Hash مربوط به کامیت مورد نظر را پیدا کرده و براساس ساختار زیر، آن را برگردانید:
git revert 3321844
بعد از انجام این کار صفحهای شبیه به تصویر زیر را خواهید دید که با استفاده از shift + q میتوانید از آن خارج شوید.
![revert](https://blog.hamravesh.com/blog/wp-content/uploads/2024/02/resim-2.png)
یکی از مزایا اصلی این دستور این است که تغییرات و تاریخچه کامیتها، حتی پس از انجام این دستور باقی خواهند ماند و میتوانید کماکان از آنها نیز استفاده کنید. همچنین تا زمانی که عملیات Push را انجام ندهید، روی ریپازیتوری ریموت شما اتفاقی نخواهد افتاد.
دستور دهم: git merge
زمانی که پروژه شما روی برنچ تکمیل شد و همه چیز به درستی کار کرد، نیاز است که این تغییرات را روی برنچ اصلی پروژه (برنچ dev یا master) نیز اعمال کنید. برای انجام این کار نیاز است که از دستور git merge
استفاده کنید.
ابتدا وارد برنچ dev (برنچ اصلی) شوید:
git checkout dev
قبل از انجام فرایند ادغام یا Merge نیاز است که برنچ dev مربوط به محیط لوکال خود را آپدیت کنید:
git fetch
در نهایت عملیات ادغام را با دستور زیر انجام دهید:
git merge <branch-name>
نکته: قبل از انجام تمام این موارد، مطمئن شوید که برنچ dev شما به آخرین نسخه بهروزرسانی شده است.
آشنایی با سرویس همگیت
همگیت سرویس گیتلب رایگانی است که همروش برای کاربران خود فراهم کرده است. کاربران همروش میتوانند ریپازیتوریهای خود را با خیال راحت از امنیت و حفظ حریم خصوصی روی همگیت بارگذاری کنند.
این سرویس که به مدت چند سال توسط همروش و مشتریان سازمانیاش مورد استفاده قرار میگرفت، پس از اعمال تحریمها از سوی گیتلب، به صورت عمومی به کاربران ایرانی عرضه شد تا بتوانند به سهولت از یک سرویس گیتلب مطمئن استفاده کنند.
برای آشنایی بیشتر با این سرویس میتوانید مستندات همگیت را مطالعه کنید.
جمعبندی
گیت یکی از ضروریترین ابزارهای مدیریت پروژه است که توسط بسیاری از متخصصین در حوزههای مختلف به صورت روزانه استفاده میشود.
در این مطلب از وبلاگ همروش سعی کردیم تا شما را با ۱۰ مورد از ضروریترین دستورات گیت آشنا کنیم.