Git یک ابزار عالی برای کنترل نسخه است. همچنین همکاری با دیگران را کارآمدتر می کند.

در این مقاله، یاد خواهید گرفت که چگونه هنگام پیگیری پروژه خود با Git، به commit های قبلی برگردید.

دو دستوری که در این مقاله در مورد آنها صحبت خواهیم کرد عبارتند از git reset و git revert. این دستورات می توانند به شما کمک کنند تا commit های خود را لغو کرده و به commit قبلی بازگردید.

با این حال، آنها دقیقاً یکسان نیستند، بنابراین با نشان دادن نحوه عملکرد هر دستور در یک پروژه، این مقاله را کمی کاربردی تر می کنیم.

هر کسی می‌تواند این آموزش را دنبال کند زیرا این آموزش مختص زبان نیست – ما از یک فایل متنی (txt) استفاده خواهیم کرد.

نحوه بازگشت به یک کامیت قبلی با استفاده از git reset فرمان

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

برای شروع، من یک فایل به نام ایجاد کرده ام tasks.txt. فایل این را در خود دارد:

1. code.
2. Practice.
3. Build. 

در مرحله بعد، ما این فایل را مقداردهی اولیه، اضافه و commit می کنیم:

git init
git add tasks.txt
git commit -m "first commit"

ما اولین تعهد را انجام داده ایم.

ما روند بالا را دو بار دیگر تکرار می کنیم اما قبل از هر commit یک خط متن اضافی به فایل اضافه می کنیم. به این معنا که:

1. code.
2. Practice.
3. Build. 
4. Research. 
git add tasks.txt
git commit -m "second commit"

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

1. code.
2. Practice.
3. Build. 
4. Research. 
5. Write.
git add tasks.txt
git commit -m "third commit"

اکنون سه کامیت داریم. برای بازگشت به commit قبلی، ابتدا باید شناسه commit را دریافت کنید. برای انجام این کار، دستور زیر را اجرا کنید:

git log --oneline

در ترمینال من این را دارم:

git-commit
git log –oneline

همانطور که در بالا مشاهده می کنید، این دستور تمام commit های شما را به همراه شناسه آنها فهرست می کند.

پیشنهاد می‌کنیم بخوانید:  نحوه استفاده از Git و GitHub - مقدمه ای برای مبتدیان

برای بازگشت به کامیت دوم، شما باید آن را اجرا کنید git reset دستور به دنبال شناسه commit. به این معنا که:

git reset 5914db0

اگر تا این مرحله پیگیری کرده باشید، هیچ تفاوتی در فایل مشاهده نخواهید کرد (بعداً خواهید دید که چگونه commit و تغییرات ایجاد شده در فایل را لغو کنید).

فایل همچنان به این شکل است:

1. code.
2. Practice.
3. Build. 
4. Research. 
5. Write.

اما زمانی که ما اجرا می کنیم git log --oneline دستور، کامیت سوم در لاگ commit ها نخواهد بود:

متعهد دوم
git log –oneline

ما با موفقیت به یک commit قبلی بازگشتیم.

اگر می خواهید یک commit را لغو کنید و تمام تغییرات ایجاد شده پس از آن commit را انجام دهید، آن را ضمیمه کنید --hard پرچم به شما git reset فرمان

بیایید این را با بازگشت به اولین commit آزمایش کنیم:

git reset 89f6c3d --hard

اکنون فایل متنی به این صورت است:

1. code.
2. Practice.
3. Build. 

ما به حالت اولیه فایل در نقطه commit مشخص شده بازگشته ایم. تمام تغییراتی که پس از آن commit در فایل ایجاد شده بود، حذف شدند. هنگامی که ما گزارش commit را بررسی می کنیم، فقط اولین commit را خواهیم داشت.

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

اگر یک commit را لغو کنید و هر تغییر فایلی را که بعد از آن انجام می شود حذف کنید، ممکن است تغییرات مهمی را که شما و سایر هم تیمی ها در کدتان ایجاد کرده اند از دست بدهید. این کار تاریخچه تعهد پروژه شما را نیز تغییر می دهد.

خوشبختانه برای ما، راهی برای بازیابی وضعیت یک commit حذف شده وجود دارد. در اینجا می توانید در مورد آن اطلاعات بیشتری کسب کنید.

نحوه بازگشت به یک کامیت قبلی با استفاده از git revert فرمان

من قبلاً پروژه را مقداردهی اولیه کرده ام و مانند قسمت قبل سه تعهد انجام داده ام. در اینجا گزارش commit به نظر می رسد:

commit-log
git log –oneline

برای بازگشت به commit قبلی، آن را اجرا کنید git revert دستور به همراه شناسه commit commit فعلی.

در مورد ما، از شناسه کامیت سوم استفاده خواهیم کرد:

git revert 882ad02

دستور بالا commit فعلی را لغو می کند و فایل را به حالت commit قبلی برمی گرداند. هنگامی که گزارش های commit را بررسی می کنید، چیزی شبیه به این خواهید داشت:

پیشنهاد می‌کنیم بخوانید:  ارسال درخواست‌های POST JSON با AxiosAxios یک کتابخانه مشتری HTTP مبتنی بر وعده است که ارسال درخواست‌های HTTP ناهمزمان (مانند POST، GET و DELETE) را به نقاط پایانی REST، عمدتاً APIها، ساده می‌کند. در این مقاله، روش ارسال درخواست های POST JSON با Axios و روش مدیریت هر دو سریال قبلی و غیر سریالی را یاد می گیریم.
برگرداندن ورود به سیستم
git log –oneline

بر خلاف git reset فرمان، git revert دستور یک commit جدید برای تغییرات برگردانده شده ایجاد می کند. commitی که از آن برگشتیم حذف نخواهد شد.

بنابراین همانطور که می بینید، git reset و git revert سلام.

git reset تغییرات را تا وضعیت شناسه commit مشخص شده خنثی می کند. به عنوان مثال، بازگشت به شناسه commit دوم، تغییرات را خنثی می کند و وضعیت فایل را به عنوان وضعیت commit دوم باقی می گذارد.

git revert تغییرات را تا وضعیت قبل از commit ID مشخص شده لغو می کند. به عنوان مثال، بازگشت به شناسه commit دوم، تغییرات را خنثی می کند و وضعیت فایل را به عنوان وضعیت commit که قبل از commit دوم – commit اول است، باقی می گذارد.

توضیحات بالا ممکن است گیج کننده به نظر برسد. بهترین راه برای درک آن این است که خودتان آن را امتحان کنید.

چه موقع باید استفاده کرد git reset و git revert

شما باید استفاده کنید git reset هنگام کار بر روی یک مخزن محلی با تغییراتی که هنوز از راه دور انجام نشده است. این به این دلیل است که اجرای این دستور پس از اعمال تغییرات از مخزن از راه دور، تاریخچه commit پروژه را تغییر می‌دهد و منجر به تداخل ادغام برای همه افرادی می‌شود که روی پروژه کار می‌کنند.

git reset وقتی متوجه می شوید که تغییراتی که در یک شعبه محلی خاص ایجاد می شود باید در جای دیگری باشد، گزینه خوبی است. می توانید بدون از دست دادن تغییرات فایل خود، بازنشانی کنید و به شاخه مورد نظر بروید.

git revert گزینه خوبی برای برگرداندن تغییرات فشار داده شده به یک مخزن راه دور است. از آنجایی که این دستور یک commit جدید ایجاد می کند، می توانید با خیال راحت از شر اشتباهات خود خلاص شوید بدون اینکه تاریخچه commit را برای دیگران مرتب کنید.

خلاصه

در این مقاله در مورد بازگشت به commit های قبلی در Git صحبت کردیم.

ما در مورد دو دستور اصلی صحبت کردیم که نشان می دهد چگونه تغییرات Git را لغو کنیم – the git reset و git revert دستورات

ما همچنین دیدیم که هر دو دستور با استفاده از مثال های عملی چگونه کار می کنند.

کد نویسی مبارک!