کار با کامیت در گیت به صورت لوکال یا ریموت
اگر جز توسعهدهندگان باشید، امکان ندارد نام گیت به گوشتان نخورده باشد. در حال حاضر گیت جز محبوبترین سیستمهای کنترل نسخه در بین توسعه دهندگان است. با استفاده از گیت، میتوان تغییرات رخ داده در روند پروژه را دنبال کرد و هماهنگی لازم بین چند توسعه دهنده به آسانی انجام میشود. گیت مستندات خوبی تهیه کرده و روند یادگیری منعطفی دارد. هدف اولیه این نرم افزار، برای استفاده در پروژههای نرم افزاری بود ولی میتوان از آن تنها برای دنیال کردن تغییر فایلها هم استفاده کرد.
کامیت در گیت
کامیت گیت مهمترین دستور گیت بوده و از آن برای گرفتن یک اسنپشات از مخزن استفاده میشود. این دستور معمولا به شکل زیر به کار میرود:
git commit -m “Message”
-m تعیین میکند ک قسمت بعدی دستور کامیت گیت به عنوان یک پیام در نظر گرفته شود.
Undo کردن کامیت گیت
به منظور ذخیره نسخههای مختلف پروژه در Git، از کامیت در گیت استفاده میشود. کامیت (Commit) یک نسخه مستقل از پروژه شما بوده و به تمامی فایلها و پوشههایی که بخشی از آن نسخه هستند، اشاره دارد. برای اینکه در مورد ساخت کامیت بدانیم، باید در مورد سه فضای مختلف گیت شامل Staging، Working directory و Commit history اطلاعات داشته باشیم.
Working history در اصل همان محتویات پوشه پروژه ما است. این فضا را میتوان به عنوان محل کاری در نظر گرفت که میتوان پروندههایی را به پروژه اضافه، ویرایش یا حذف کرد. در این میان staging area و commit history بخشی از ریپازوتوری یا مخزن ما به حساب میآیند.
در طول انجام پروژه، گاه پیش میآید که دچار اشتباه شوید. ممکن است فایلهای اشتباهی در کامیت قرار داده شود. یا در پیام کامیت غلط املایی وجود داشته باشد. در چنین مواقعی، شما به عنوان توسعه دهنده قصد دارید که از مخزن ( ریپازیتوری) لوکال یا ریمون پاک کنید. اما چگونه؟ در این مقاله با چگونگی کار با کامیت گیت به صورت لوکال یا ریموت آشنا شده و با حالتهای undo کردن گامیت کیت کار خواهید کرد.
Undo کردن کامیت گیت به صورت لوکال
برای Undo کردن کامیت گیت به صورت لوکال با چندین حالت روبرو هستیم. برای حل تمامی حالات، نگرانی وجود نداشته و با کدهای ساده میتوان کامیت گیت را بازگردانی کرد.
- Stage کردن فایلهای نامربوط
اگر قصد ایجاد یک کامیت گیت در مخزن لوکال داشته باشید، این کار با این دستور انجام میشود:
git add
یا
git add -all
تمامی تغییرات همه فایلها در فضای Staging در آن مخزن اضافه میشود. در گیت، میتوان با استفاده از دستور git reset
تغییرات را undo کرد. بنابراین زمانی که متوجه شوید، برخی تغییرات به آن کامیت ارتباطی ندارد و باید آن فایلها را هم در کامیت اضافه کنیم. از دستور زیر برای Stage کردن فایلهای نامربوط استفاده میشود:
git reset unwanted_file
با استفاده از این دستور، فایل تغییر یافته را میتوان از فضای staging به working directory انتقال داد.
- پیام نادرست کامیت گیت
اگر کامیت آخر شما دارای غلط املایی باشد، با استفاده از دستور زیر میتوان مشکل را رفع کرد:
git commit –amend
با استفاده از این دستور، ویرایشگر ترمینال پیش فرض باز شده و میتوان پیام کامیت آخر را ویرایش کرد. اما اگر قصد کار با ویرایشگر را نداشته باشید، از دستور زیر استفاده کنید:
"git commit --amend -m "my updated commit message
با استفاده از دستور بالا، در واقع کامیت گیت کنونی بازنویسی میشود. اگر این کامیت، قبلا پوش شده باشد و دیگر شرکت کنندگان در روند پروژه، بر اساس این کامیت تغییراتی را اعمال کرده باشند. همچنان از ورژن قبلی استفاده خواهند کرد. با وجود چنین مسائلی یک تداخل گیت یا همان git conflict رخ میدهد.
- افزودن تغییرات اضافی به کامیت آخر
اگر یک کامیت داشته باشید که هنوز پوش نشده باشد اما نیاز به اعمال تغییرات اضافی احساس شود. در این حالت، با استفاده از دستور add فایلهای تغییریافته را به فضای Staging اضافه میکنیم:
git add forgotten-file.js
سپس از کامیت گیت و از فلگهای amend و no-edit استفاده میشود. این دستور به صورت خودکار، تغییرات آخرین موارد استیج شده را به آخرین کامیت اضافه کرده و صرفاً محتوای کامیت کنونی آپدیت میشود. این کار یک عملیات امن در مخزن لوکال به حساب میآید.
git commit --amend --no-edit
Undo کردن کامیت گیت به صورت ریموت
در هنگام کار با کامیت گیت به صورت ریموت با دو حالت Undo کردن کامیت قبلا پوش شده و Undo کردن چند کامیت روبرو هستیم.
- Undo کردن کامیت قبلا پوش شده
اگر یک کامیت را قبلا پوش کرده باشیم. به صورتی که چند تغییر در مخزن لوکال ایجاد کرده و به یک کامیت در مخزن ریموت پوش کرده باشیم. اگر لازم به تغییر برخی از موارد باشد. از آنجایی که کاربران مخزن ریموت دیگر هم ممکن است آخرین تغییرات را دریافت کرده و از آن به صورتی که هیستوری گیت تغییر نکرده، استفاده کرده باشند. امنترین روش ایجاد یک کامیت اضافی برای برگرداندن تغییرات است. در ابتدا از دستور git log استفاده میشود تا در مورد لاگ کامیت گیت اطلاعاتی داشته باشیم:
git log –oneline
در تصویر بالا میبینید که در ابتدای هر رشته شناسه کامیت که هش کامیت گیت هم گفته میشود وجود دارد. پس از آن اطلاعات مربوط به branch که شامل پیام کامیت هم دیده میشود. با فشردن کلید q بر روی صفحه کیبورد خود میتوانید از صفحه لاگ گیت خارج شوید. همان طور که میدانید در گیت، Head به معنای جدیدترین کامیت در شاخه ( برنچ) جاری است.
git revert HEAD
با این دستور، میتوان روی جدیدترین کامیت گیت تغییرات اعمال کرد. با اجرای این دستور، ویرایشگر پیش فرض باز شده و آخرین پیام کامیت هم دیده میشود که میتوان آن را ویرایش کرد.
پس از ذخیره پیام کامیت، عبارت :wq را وارد کرده و پس از فشردن Enter خروجی دستور git revert به شرح تصویر زیر خواهد بود:
با استفاده از دستور git log مجدداً سابقه گیت را بررسی کرده و مشاهده میشود که یک کامیت گیت git revert اضافی که تغییرات قبلی را در کامیت my feature implementationبازگردانی کرده وجود دارد. در این حالت هیچ تداخل گیت رخ نداده و یک عملیات امن در کار با کامیت گیت به صورت ریموت یا لوکال به حساب میآید.
- Undo کردن چند کامیت
گاه پیش میآید که توسعه دهنده هنگام کار بر روی یک برنچ، چند قابلیت تستی پیاده سازی کند. اما زمانی که بخواهد یک درخواست Pull به شاخه فیچر ارسال شود، وجود کامیتهای مختلفی که به فیچر ارتباطی نداشته و سبب شلوغی بیش از حد آن میشود احساس میشود. در این حالت، طبق روال قبل با استفاده از دستور git log کامیتهای آن شاخه بررسی میشود:
از دستور زیر استفاده میکنیم:
<span class="englishfont"><span class="englishfont">git rebase -i 1875e2a</span></span>
این دستور، ویرایشگر ترمینال پیش فرض را باز کرده و تمامی کامیتها را پس از پیام کامیت اولیه نشان میدهد:
اگر قصد حفظ کامیت در گیت داشته باشید، کلید واژه Pick را استفاده کرده و در مقابل یا استفاده از d یا drop کامیتها حفاظت نمیشوند.
سپس با دقت تغییرات را بررسی کرده، ویرایشگر را ذخیره کرده و ببندید. خروجی تمامی موارد به شرح تصویر زیر خواهد بود:
در صورتی که بخواهید کامیتها را بررسی کنید، مجدداً دستور git log را استفاده کرده و با لاگ کامیتها روبرو شوید.
اما نکته مهم این است که این عملیات یک کار تخریبی بوده و باید روی شاخهای که هیچ توسعهدهنده دیگری بر آن کار نمیکند، انجام شود.
حذف آخرین کامیت از گیت هاب
اگر حین کار، در گیت کامیت انجام دهید و یک سری فایل اشتباه هم ارسال کنید. در چنین مواردی اگر قصد حذف آخرین کامیت گیت از گیت هاب را دارید. از دستورات زیر استفاده کنید:
در نظر داشته باشید که با این روش، تمامی کدها از سیستم پاک میشود. اما این کار، یک بازگشت به عقب حساب شده و با دوباره pull کردن از سرور، قابل بازگشت است. اگر نمیخواهید کدها پاک شود از گیت پول استفاده کرده و اگر قصد پاک کردن اس سرور هم داشته باشید، به همان روش گفته شده به سرور پوش کنید.
چرا پیام کامیت گیت مهم است؟
مهمترین ابزاری که در اختیار توسعهدهندگان است، لاگ تغییرات کدهاست. موفقیت یک پروژه وابسته به نگهداری یا مدیریت آن در بلند مدت است. این وظیفه مهم، بر عهده شرکتکنندگان اصلی در فرایند پیشبرد پروژه است. تنها با وجود پیامهای درست و با معنی است که دستوراتی مثل
- Git rebase
- Blame
- Revert
- Log
کاربرد پیدا میکنند.
برای داشتن یک تاریخچه موثر از کامیتها در گیت، وجود یک قالب استاندارد لازم و ضروری است. این قالب استاندارد باید از سه ویژگی زیر تبعیت کرده باشد:
- ساختار
- محتوا
- متادیتا
در این بخش با هفت قدم بزرگ و موثر در نوشتن یک پیام استاندارد در کامیت گیت آشنا خواهیم شد.
- حرف اول عنوان بزرگ نوشته شود.
- طول عنوان بیش از ۵۰ حرف نباشد.
- عنوان به صورت امری نوشته شود.
- یک خط فاصله بین عنوان و متن باشد.
- در انتهای عنوان نیازی به نشانهگذاری نیست.
- طول خطوط در متن کمتر از ۷۲ حرف باشد.
- در متن به جای توصیف چگونگی انجام تغییرات، دلیل کامیت توضیح داده شود.
جمع بندی
در این مقاله با کار روی کامیت گیت به صورت لوکال یا ریموت آشنا شدیم. برای این کار در مورد حالتهای مختلفی که میتوان در صورت کار با کامیت در گیت به صورت لوکال یا ریموت رویرو شویم، بررسی کردیم. دستورات لازم برای حل تمامی موارد گفته شده و خروجی کدها هم نشان داده شد. باید بدانید که به عنوان یک توسعه دهنده باید گیت، موجود عجیب ولی دوست داشتنی را یاد بگیرید. در ابتدای راه، ممکن است کمی گیج شوید ولی به مرور، با جذابیتها و ویژگیهای منحصر به فرد آن آشنا خواهید شد. دستورات گیت برای کمک شما حاضر بوده و وجود دورههای آموزش گیت در این زمینه، راهنمای خوبی برای پیشرفت در این مسیر است.