دستورات کاربردی و کمتر رایج در Git

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

دستورات کاربردی و کمتر رایج در Git

در زیر دستورات کاربردی و سناریوهایی رو باهم بررسی می کنیم

دستورات

git restore .

با استفاده از این دستور تمام تغییرات به Commit قبلی برمی‎گردند. یا ساده بخوام بگم تمام تغییرات کامیت نشده بازگردانده میشن.


git restore file.py

این دستور مانند مورد قبلی است با این تفاوت که جزئی تر کار رو انجام میده و فقط یک فایل رو به نسخه قبل باز میگردانه


git reset --hard <hash>

این دستور تمام کامیت ها را در لیست حذف کرده و به کامیت مورد اشاره شما با Hash مربوطه می رود.


git reset --source <hash> index.html

این دستور مشابه مورد قبل است ولی جزئی تر عمل کرده و روی یک فایل خاص عملیات بازگردانی به کامیت را انجام می دهد.


git commit --amend -m 'New message'

فرض کنید یک کامیت را ثبت کرده اید ولی پیغام آن اشتباه بوده یا باید عوض شود. با این دستور می توانید این کار را انجام دهید.


git revert <hash>

این دستور کامیت ها را به کامیت قبلی با Hash داده شده بر می گرداند ولی تفاوت کوچکی با reset دارد. با استفاده از reset تمام کامیت هایی که در این بین وجود دارند حذف خواهند شد ولی revert کامیت جدیدی ایجاد کرده و محتویات ریپازیتوری به آن نسخه مهاجرت خواهند کرد.


git reflog

با استفاده از این دستور می توانید کامیت ، فایل و تغییرات حذف شده را بازیابی کنید.


git reset HEAD~2

این دستور تمام تغییرات مربوط به 2 کامیت اخیر را باز می گرداند و آن ها از حالت Stage خارج می شوند.


git rebase

این دستور یکی از کاربردی ترین هاست. می توانید تغییرات محلی خودتون رو با برنچ اصلی ادغام کنید و برخلاف دستور merge که کامیت اضافی برای این کار تخصیص می دهد ، کامیت های جدید به ازای تمام کامیت های قدیمی شما ایجاد می شود.

تفاوت بین merge و rebase رو می توانید از این آدرس مشاهده کنید.

عملیات Stash

git stash

دستور stash در واقع مشابه draft برای یک نوشته است. فرض کنید در حال تغییر روی پروژه هستید و نمیخواید این تغییرات نصفه و نیمه کامیت بشه. در این صورت می توانید تغییرات خودتون رو ذخیره کنید تا بعدا کامل شده و به صورت نهایی کامیت بشه.


git stash push -m "Message"

با این دستور همراه stash شما یک پیغام نیز ضمیمه می شود


git stash list

این دستور لیستی از تمام تغییرات ذخیره شده شما نمایش خواهد داد.

لیست تغییرات شما همراه با یک اندیس نمایش داده می شوند. آخرین تغییرات ذخیره شده در بالای لیست به همراه اندیس 0 لیست می شوند.


git stash apply

با این دستور آخرین تغییر ذخیره شده بازگردانده شده و می توانید به کار خود ادامه دهید.


git stash apply <index>

برخلاف دستور قبل که آخرین تغییر را برمی گرداند ، این دستور یک مورد خاص را با اندیس مربوطه برمی گرداند.


git stash drop <index>

این دستور یک تغییر ذخیره شده مشخص را حذف می کند.


git stash pop

این دستور آخرین تغییر ذخیره شده را به فضای کار فعلی بر میگردونه و اون رو از لیست حذف می کنه.


git stash pop <index>

این دستور عملیات قبل را روی مورد خاصی اعمال می کند.


git stash clear

این دستور تمام تغییرات ذخیره شده را حذف می کند.

انتقال تغییرات به یک Branch

git checkout feature-branch
git cherry-pick <hash>
git checkout master
git reset HEAD~1 --hard

Squashing

زمانی که یک PR ثبت می کنید ، لیستی از کامیت ها در آن وجود دارد که با Merge کردن تمام آن ها به Branch مورد نظر اضافه خواهند شد. می توانید تمام این کامیت ها را به یک نسخه تبدیل کرده تا Branch مقصد شلوغ و کثیف نشود

git rebase -i <hash>

در اینجا تمام کامیت ها تا کامیت مشخص شده با Hash مربوطه باهم ادغام می شوند.


git rebase -i HEAD~4

با استفاده از این دستور 4 کامیت آخر ادغام می شوند.

Bisect

در اینجا یک سناریو داریم. فرض کنید در کدهای پروژه شما یک باگ وجود داره که دقیق نمی دونید کدوم کامیت باعث اضافه شدن اون باگ شده. در اینجا از جستجوی باینری استفاده می کنیم.

git bisect start

عملیات جستجو آغاز می شود

git bisect good <hash>

با استفاده از این دستور می توانید یک کامیت را مشخص کنید. معمولا اولین یا دومین کامیت خواهد بود و به گیت گفته میشه تا جستجو از وسط لیست آغاز بشه.

گیت عملیات جستجوی خودش رو آغاز می کنه و شما باید بررسی و تصمیم بگیرید که کدام کامیت خود و کدام بد است :

  • git bisect good : اگر کامیت خوب بود
  • git biscet bad : اگر کامیت دارای باگ بود

پس از اینکه فیدبک های خودتون رو ثبت کردید ، گیت یک ساختار درختی منظم داره که برای برگرداندن کامیت دارای باگ استفاده می شود. شما می توانید Hash آن را کپی کنید. همچنین یک رفرنس با عنوان refs/bisect/bad ایجاد می شود که به آن کامیت اشاره می شود.

پس از اجرا و مشخص شدن وضعیت ، کارهای زیر را انجام می دهیم :

git biscet reset

این دستور به صورت پیشفرض شما را به آخرین کامیت قبل از اجرای biscet می برد.

git revert <hash of the bad commit>

حال با استفاده از این دستور می توانید تغییرات مشکل داری را که آن کامیت ایجاد کرده بود از بین ببرید.


شما دستورات دیگری رو میشناسید که مفید باشن و کمتر استفاده بشن؟ تو قسمت نظرات برام بنویسید 😀