سفری کوتاه در گیت

سلام به همه ی جاواکار های گسسته شدهچند مدته پیش با حالی بد به مدیری که هرگز افتخار همکاری باهاش نداشتم تماس گرفتم و گفتم من نمیدونم چی بخونمگفت کمی بیخیال باش اول تا بتونی لذت ببری از زندگی و بعد ادامه داد: گفت یکی از بهترین راه ها اینه که یک ردمپ شروع کنی و بخونی و بهم یه ردمپ توی حوزه ی بک اند با جاوا پیشنهاد داد.بعد از اون دوست عزیزش به عنوان یه کوچ کنارم ایستاد و بهم گفت چی مهمه و مطالعه کنبرای همتون آرزوی میکنم یه پارتنر موقشنگ نه چیز یه معلم سنیور خدا بهتون بده.اون دو عزیز آقای سهیل قلکاری و سلطان احسان شیشه بر هستن خواستم از همین تریبون از هر دو تشکر کنم و ممنون زحماتشون بشم( :اولین تیتر در این ردمپ گیت بود من تصمیم گرفتم صرفا فلو و استیج هارو مطالعه کنم که در هر کدوم چه اتفاقاتی میوفته و چیزایی که برای بار اول میدیدمو مطالعه کنم دقیقا شبیه کسایی که میگن بار اولمونه ولی ست میپوشن///:اول اینکه من تصمیم گرفتم از www.javatpoint.com سایت بخونم و فهم خودمو تا حد بی نهایت خلاصه بنویسم.اگرم میبینید از طنز کار کم شده چون اصلا از لحاظ روحی توی مود خوبی نیستم پس پیشاپیش پوزش میطلبم اگر نبخشیدید امیدوارم گیتتون برنچا قاطی بشه یه rebase بخوره براتون و چند فایل به هر دلیلی از ایندکستون پاک شه نتونید تریس کنید و اگرم جاوا کارین کانتکس اسپرینگ براتون آپ نشه😁😁$ git initاولین دستور همینه برای اینکه بخوای یه ریپازیتوری خالی درست کنی باید ازین دستور استفاده کنی و بعدش در چاه زیبا و اعتیادآور گیت بیوفتی(دلسوخته هاش میفهمن چی میگم)$ git add <File name>میاد این هر فایلی رو که بهش میگین اضافه میکنه به index جایی که گیت نسبت به تغییرات رخ داده توی اون فایل حساس میشه و اونا رصد میکنه خیلیییی غیرتیییی حتی یه نقطه رو هم جا نمیندازه کاری ندارم تهش همه کات میکنن اما خوب...$ git commit -m "Commit message."اینجا اتفاقی که میوفته اینه که با کامیت کردن تغییرات به کمک یه مسیج میتونید تغییرات رو توی ریپازیتوری ثبت کنید و داشته باشین.(هههه به چی میخندی خودت که آدمارو هم فراموش میکنی چه برسه به کدات اینجا مجبوری گردن بگیری وگرنه هدت در چند جهت مختلف برشت میده)$ git clone <repository URL>در کلون کردن شما یک کپی از کد رو میتونید از ریپازیتوری دانلود کنید و توی سیستم خودتون داشته باشین و روش کار کنید حالا این ریپازیتوری میتونه ریموت باشه یا لوکال.$ git stashدستور استش جالبه برای آدمای کوالایی تهیه شده فکر کن وسط یه تسکی هنوزم تسکت به جایی نرسیده که وسطش یه کامیت بزنی بعد یهو رفیقت میاد میگه حشمت برای عمو یه شعر بخون نه چیز اون مشکل اون روزتو ببینم میخوام کمکت کنم سلطان🙄از قضا مشکل تو توی یه برنچ دیگس کامیت هم میخوای نزنی اینجاس که گیت میگه خوشگل عمو بیا تغییرات رو موقتا من برات استش میکنم یه جا ذخیره میکنم برو برنچو به هم نشون بده برگرد و اونارو دوباره به برنچت اضافه کن و کار کن باشون.توهم باید بگی چشم همین.Git Ignoreگیت یه قابلیتی داره میگه آدم حسابی یسری فایل idea یا کد ادیتور ها ممکنه به پروژت اضافه کنن که نه بدرد ما میخوره نه بدرد دیگران اینا مال خودت لطفا نکن توی پاچه ی پروژه پس بهت این امکان رو میده که یه فایل به اسم gitignore. بسازی و هر چی میخوای ندید گرفته شه و نیاد توی پروژتو اونجا بسازیGit Forkفرض کنید میخوای روی پروژه ای کار کنید خوب اینجا میرید اونو کلون میگیرین و بسم الله اما یه وقتی به شما اجازه داده نمیشه روی پروژه ی اصلی کار کنید اینجا گیت میگه اوکی یه کپی از اون برای خودت بساز هر غلطی که میخوای اونجا باش بکن.بیشتر موقعی که میخوایم یه پروژه ی اوپن سورس رو روش کار کنیم این طوری میشه یه فورک میگیریم و روش کار میکنیم هرزگاهیم خودمون رو با مخزن اصلی طرف آپدیت میکنیم.Git Repositoryاین ریپازیتوری که هی حرفشو زدیم چیه اصلا؟ جایی هست که فایل های شمارو ذخیره میکنه فایل های پروژه و... میتونید هم یه مخزن لوکال داشته باشین روی سیستم خودتون هم یه مخزن ریموت که یه جایی خارج از سیستم شما و اغلب در سرور ها نگه داری میشه.Git Indexبچه ها ما یک سکویی داریم به اسم index این همون جایی که هر کسی بیاد توش زیر نظر قرار گرفته میشه و کاراش رصد میشه دقیقا شبیه وقتی یکی وارد قلب شما میشه همه ی کاراشو زیر نظر میگیرید و بهش دقت میکنید ولی تا این حد مثله گیت نباشید چون اذیت میشه( :Git Headهد چیه به زبان ساده هد به آخرین کامیت شما در برنچ موجود داره اشاره میکنه.سختش نکنید در قدم اول مهم مفهومه همیشه اول باید یه کسی و کم بشناسی بعد باش دعوا کنی وگرنه باختی کوچولو.Git Origin Masterبرنچ دیفالت و اصلی گیت همیشه مستر هست که شما یکی در سرور ازش داری یکی توی لوکال یا سیستم خودت حالا به اونی که توی سرور هست میگن origin master و توی لوکال یا سیستم شما به اون برنچ فقط میگن master پس هر وقت میخوای با اون مخزن برنچ توی سرور ارتباط برقرار کنی باید از پیشوند origin استفاده کنی گل های توی خونه.Git Branch سببینید عزیزای دلم ما میتونیم نسخه ای از ریپازیتوری داشته باشیم که از پروژه اصلی کاری جدا می کنه مثلا یه پروژه ی دفترچه تلفن داریم که شاید یه برنچ در حال توسعه ی دکمه هاش باشه یکی توسعه ی دیتابیس یکی خود کد لاجیک و...کسایی که اجایل هستن معمولا اسم برنچ هارو اسم تسکا میزارن که بعدا راحت تر بفهمن روی چی کار میکردن(از دی که گذشت هیچ از او یاد مکن بچه خوشگل)Git Merge and Merge Conflictیه بحثییه بحثی هست همه ازش زخم خوردن اصلا یکم بد دسته و وحشی هر کی از کنارش رد میشه باید یه آزاری بهش بده ببینید گفتیم ما میتونیم برنچ های متفاوتی داشته باشیم که روی نسخه اصلی تعریف شدن حالا کارشون تموم شده دکمه ها آمادن حالا میخوایم اینارو بزاریم کنار هم پس برنچ ها رو با مستر ادغام میکنیم به این میگن مرج حالا شاید شاید این دو نفر روی یه قسمت از سیستم هم کار کردن که مشترک بوده اینجا گیت میگه بابا من گاوم نمیفهمم کدومو میخوای بیا بلند شو از هم گسستگی رو بزار کنار بهم بگو کدومو میخوای و شما بهش میگی به این مشکل کانفیلیکت و به حلش رفع مغایرت یا همون کانفیلیکت میگن.Git Rebaseخوب rebase دقیقا شبیه مرج هست با یه تفاوت کوچک اونم اینه توی مرج کردن شما بعد از پیوستن به برنچ جدید تاریخچه ی تغییرات برنچی که پیوسته رو نخواهید داشت و صرفا توی برنچ پذیرنده میگه یه مرجی رخ داده اما توی rebase تو تاریچه ی برنچی که بهش اضافه کردیو داری پس سناریو رو میتونی بهتر بفهمی هانی😊Git Squashاین دستور قسمتی از آپشن های rebase هست اما جالبه میاد برات چندتا کامیتو یکی میکنه.$ git checkout <branchname>ساده میگم اگر میخوای بین برنچ هات جا به جا بشی و سوییچ کنی باید از دستور checkout استفاده کنی اون اینکارو برات میکنه.$ git revert <commit-ish>فکر کنید یه کامیتی زدین اشتباهه سیستم به فنا رفته برای اینکه برگردین به کامیت قبلی که درست بوده از دستور ریورت استفاده میکنید بهش میگین به فلان کامیت ریورت شو.با گیت دوشواری نداریم بزرگواران.Git Resetشما میخوای تغییرات رو برگردونی پس بیا از reset استفاده کن این بچه سه حالت داره--soft: uncommit changes, changes are left staged (index).--mixed (default): uncommit + unstage changes, changes are left in working tree.--hard: uncommit + unstage + delete changes, nothing left.اولی صرفا تغییرات رو index ور میداره یعنی هیچی نمیشن هستن همنجا فقط انگار کامیتی نخورده.دومی که حالت دیفالت هم هست کامیتت رو ور میداره و تغییرات رو هم از توی ایندکس میاره بیرون یعنی untrack میکنه.سومی که خطرناکم هست هم کامیتت رو ور میداره هم از ایندکس خارج میکنه هم پاکشون میکنه///:$ git rm <file Name>این برای خودمم جالب بود بچه ها وقتی میخواین یه فایلی رو به گیت بگین track یا از زیر نظر خارج کنه از rm استفاده میکنید.Git Cherry-pickخوب رسیدم به چری عشقای من فکر کنید ده تا کامیت زدین الان فهمیدین یکی ازینا خرابه و بهشم نیاز ندارین اینجا میگین گیت جان برای برای من فلان کامیتو ببر روی مثلا برنچ مستر میگه چشم اما اسمشو یاد بگیر این حرکت اسمش cherry-pick هست.Git Fetchفکر صبح رسیدی شرکت میخوای کار کنی بهت میگن دیشب کلی کار کردن ها تو برای اینکه تمام برنچ های لوکال و ریموتت رو آپدیت کنی باید از دستور فچ استفاده کنی میره همه ی تغیررات رو برای برنچ های ریموت میگیره.Git Pullوقتی بخوایم یه دیتایی از ریموت هامون بگیریم از pull استفاده میکنیم میگیم آقای سرور آخرین تغییرات مثلا برچ dev بهم بده.Git Pushوقتی میخوایم تغییراتی رو بهم ریپازیتوری ریموت از لوکال بفرستیم از push استفاده میکنیم به ما کمک میکنه آخرین تغییراتو به مخازن ریموت در سرور بفرستیم.Git Diffاگر میخوای ببینید چه اتفاقاتی افتاده یا کد برنچ شما با برنچ های دیگه چه تفاوتی داره میتونید از diff اسفاده کنید.مرسی که تحمل کردین موضوع بعدی لینوکسه چون دوسش دارم سعی میکنم براش سنگ تموم بزارم.در آخر هم بگم ارزش هر آدمی به قلبشه نه سواد و علم و....پس مراقب باشید توی چاه خودبزرگ بینی نیوفتین ( :