کار کردن با گیت سخت هست و وقتی پیچیده تر میشه که یه حالت خاصی پیش بیاد و مثلا یه اشتباهی بکنیم. تو این مدتی که با گیت توی پروژه های مختلف کار میکردم یه سری دستوراتی هستن که خیلی به درست کردن این اشتباها کمک میکنن و در واقع یکی از ویژگی های مهم یه سیستم کنترل نسخه مثل گیت همین هست.
در ادامه پست یک سری از این دستور ها رو با هم بررسی میکنیم. اینا بهترین راه حل ها نیستن و اگر راه حل بهتری برای انجام این کارهای سراغ داشتید لطفا حتما توی کامنت ها بگید تا به پست اضافه کنم.
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
گیت تغییرای فایل هایی که به محیط stage اضافه شدن ( اونایی git add ) براشون زدی رو به صورت پیشفرض نشون نمیده ولی با دستور پایین میتونی این تغییرات رو ببینی
git diff --staged
خوبی گیت اینه که اگر تغییرات قبلی رو یه جایی مثلا توی GitHub داشته باشی میتونی کل پروژه رو پاک کنی و دوباره ازش یه clone بگیری :)
من یه سری دستور جایگزین ساده برای دستورات طولانی گیت دارم ( خوب کلی دیگه هم قطعا هست که کوتاه تر از این هم هستن) خیلی معمول هست که هر کسی یکی برای خودش درست میکنه مال من تو Gist هست. اگر ازش استفاده کردین بهم بگید و اگر دستور جدیدی رو ساده تر کردید به من هم بگید که اضافه کنم.