دستورهای گیتِ نجات‌دهنده

کار کردن با گیت سخت هست و وقتی پیچیده تر می‌شه که یه حالت خاصی پیش بیاد و مثلا یه اشتباهی بکنیم. تو این مدتی که با گیت توی پروژه های مختلف کار می‌کردم یه سری دستوراتی هستن که خیلی به درست کردن این اشتباها کمک می‌کنن و در واقع یکی از ویژگی های مهم یه سیستم کنترل نسخه مثل گیت همین هست.

در ادامه پست یک سری از این دستور ها رو با هم بررسی می‌کنیم. اینا بهترین راه حل ها نیستن و اگر راه حل بهتری برای انجام این کارهای سراغ داشتید لطفا حتما توی کامنت ها بگید تا به پست اضافه کنم.

وقتی که یه چیز رو اشتباه کامیت کردی و می‌خوای ببینی می‌تونی به گذشته برگردی و دوباره کامیت کنی (گیت ماشین زمان)

git reflog

با دستور پایین می‌تونی یه لیست از تمام تغییراتی که این اواخر روی همه برنچ‌ها دادی ببینی که هر کدوم شون یه ایندکس دارن به این صورت

HEAD@{index}


کافیه توی لیستی که می‌بینی اون ایندکسی رو پیدا کنی که یکی قبل از جایی باشه که همچی رو خراب کردی و دستور پایین رو بزنی ( ایندکس رو با ایندکس مورد نظرت جایگزین کنی)

git reset HEAD@{index}

این دستور بیشتر وقتایی کاربرد داره که یه چیزی رو تو برنچ اشتباهی کامیت کردی یا فایلی رو اشتباهی پاک کردی یا مثلا یه مرج انجام دادی که کلی مشکل درست کرده و می‌خوای برش گردونی.

وقتی که تمام تغییرات رو کامیت کردی ( با کلی فکر کردن روی پیام اش) و می‌فهمی که یه چیز خیلی کوچیک رو یاد رفته اضافه کنی (گیت اصلاح‌گر)

وقتی که نیازه یه سری تغییرات نهایی انجام بدی ولی می‌خوای که داخل همون کامیت قبلی باشه. اینجا چیزی که خیلی به کار می‌یاد استفاده از قابلیت amend (اصلاح کردن) کامیت های گیت هست.

استفاده ازش به این صورت که بعد از کامیت ای که کردی دوباره تغییراتی که مدنظرت هست رو بدی و فایل هایی که باید به آخرین کامیت اضافه بشن رو با استفاده از دستور add اضافه کنی و بعد دستور زیر رو بزنی

git commit --amend

این دستور اصلاح‌گر یه کاربرد دیگه هم داره با این دستور می‌تونی پیام کامیت آخری که کردی و مشکلی داره رو اصلاح کنی.

اشتباهی یه چیزی رو روی مستر کامیت کردم که باید توی یه برنچ جدید کامیت می‌کردم ( گیت ذخیره‌گر)

این خیلی پیش میاد برای من. معمولا این روزا خیلی‌ها از فیچر برنچ استفاده می‌کنن و روی مستر به طور مستقیم کامیت نمی‌کنن. ممکنه اشتباهی چیزی رو کامیت کرده باشی باید جای دیگه ای (برنچ دیگه ای) کامیت می‌کردی. خوب اول یه نفس عمیق بکش و بعدش اول آخرین کامیت ای که کردی رو بی اثر کن و به حالت قبل برگردون

git reset HEAD~ --soft

بعد از زدن دستور بالا می‌تونی تمام تغییرات ای که داری رو توی مخزن گیت ذخیره کنی

git stash

حالا برو به برنچ درستی که باید روش کامیت می‌کردی و تغییرات رو از مخزن گیت بازیابی کن

git stash pop

خوب حالا می‌تونی تمام تغییرات رو کامیت کنی اونم روی برنچ درست!

در این مورد مقاله اصلی ای که من ازش به عنوان منبع برای نوشتن این پست فارسی استفاده کردم جدیدا یه روش دیگه رو هم پیشنهاد کرده که از قابلیت cherry-pick گیت هست که با اون می‌تونی کامیت ها رو از یک برنچ به برنچ دیگه این منتقل کنی اینجا کامیت های مستر رو می‌تونی به برنچ صحیح منتقل کنی.

اول به برنچ صحیح ای که باید کامیت های روی اون انجام بشه برین. برای آوردن کامیت از برنچ مستر دستور پایین رو بزنین ( می‌تونه از یه برنچ دیگه باشه که خوب کافیه فقط اون بخش اسم برنچ رو عوض کنی)

git cherry-pick master

به این صورت کامیت منتقل می‌شه به برنچ ای که داخلش هستی و بعد از این دستور می‌تونی به برنچ مستر بری و تغییرات رو اونجا بی اثر کنی

git reset HEAD~ --hard

وقتی که گیت diff می‌زنم هیچ چیزی دیده نمی‌شه ( گیت مقایسه‌گر)

گیت تغییرای فایل هایی که به محیط stage اضافه شدن ( اونایی git add ) براشون زدی رو به صورت پیش‌فرض نشون نمی‌ده ولی با دستور پایین می‌تونی این تغییرات رو ببینی

git diff --staged

اصلا خسته شدم هر کاری می‌کنم درست نمی‌شه!

خوبی گیت اینه که اگر تغییرات قبلی رو یه جایی مثلا توی GitHub داشته باشی می‌تونی کل پروژه رو پاک کنی و دوباره ازش یه clone بگیری :)



من یه سری دستور جایگزین ساده برای دستورات طولانی گیت دارم ( خوب کلی دیگه هم قطعا هست که کوتاه تر از این هم هستن) خیلی معمول هست که هر کسی یکی برای خودش درست می‌کنه مال من تو Gist هست. اگر ازش استفاده کردین بهم بگید و اگر دستور جدیدی رو ساده تر کردید به من هم بگید که اضافه کنم.