همه چیز در مورد تغییر دادن Commit در Git



visibility  
mode_comment   ۰

همه چیز در مورد تغییر دادن Commit در Git

فرض کنید که شما یا هم تیمی‌هاتون فایلها رو اشتباها Commit کردند و یا متن مناسبی رو برای Commit در نظر نگرفتن. در این مطلب میخوایم یاد بگیریم که تغییر دادن Commit به چه صورت هست و چگونه میتونیم کارهایی که کردیم رو Undo کنیم و دوباره Commit درست رو به وجود بیاریم. پس با ما همراه باشید.

تغییر دادن پیام Commit

اگر شما فقط متن Commit رو اشتباها وارد کردید و فایلها درست هستند میتونین به سادگی از دستور زیر استفاده کنید:

با اینکار ویرایشگر پیش‌فرضی که برای Git انتخاب کردید باز میشه و میتونین متن آخرین Commit رو تغییر بدین. در این روش میتونین به راحتی متن رو تغییر بدین و متون چندخطی رو به راحتی قرار بدین. شما میتونین بصورت مستقیم و بدون اینکه ویرایشگر باز بشه هم متن مورد نظرتون رو برای Commit آخر قرار بدین. بصورت زیر:

با اینکار پیام مورد نظر برای آخرین Commit قرار داده میشه. این روش هم مانند روش قبلی هست ولی تغییر دادن پیام و قرار دادن متون چند خطی در این روش یک مقدار سختتر هست و وقت بیشتری رو میگیره.

دقت داشته باشید که فایلهایی که به این Commit ربط ندارن بصورت Stage شده نباشند (یعنی اونا رو با استفاده از Git add بصورت stage نکرده باشیم)، چون اگر فایلهایی بصورت Stage شده باشند، اونا هم درون Commit آخر قرار میگیرن. این روش به فایلهایی که Unstage هستند کاری نداره.

تغییر دادن Commit: هم پیام و هم فایلها

اگر بخواید علاوه بر تغییر دادن پیام Commit، فایلهایی که در Commit قرار دادید رو برگردونین و اونا رو تغییر بدین، باید از روش دیگری استفاده کنید. فرض کنید که فایلهای اشتباهی رو در Commit قرار دادین و یا تغییرات اشتباهی رو در Commit قرار دادین. با روشی که در ادامه بیان میشه میتونین این نمونه اشتباهات رو برطرف کنید.

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

در اینجا 2 حالت پیش میاد. اگر این Commit اشتباه، اولین Commit باشه باید روش متفاوتی رو برای ویرایش کردن اون انجام بدین. برای این حالت از دستور زیر استفاده میکنیم:

با اینکار اولین Commit برگشت داده میشه و فایلهای درون اون به حالت Stage در میان و میتونین اونا رو مجددا ویرایش کرده و دوباره Commit کنید. به همین راحتی.

اگر Commit مورد نظر Commit اول نباشه باید روش زیر رو استفاده کنید.

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

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

زمانی که از این دستور استفاده میکنید، تغییراتی که در فایلهای مورد نظر انجام دادین به Working tree برگشت داده میشه و به حالت Unstage در میان و تغییراتی که از قبل بر روی فایلها در Working tree انجام داده بودین سر جاش باقی میمونه. حالا اگر شما دستور git log رو استفاده کنید خواهید دید که Commit مورد نظر دیگه وجود نداره.

حالا شما میتونین تغییرات مورد نظرتون رو در فایلها به وجود بیارید و دوباره فایلها رو با استفاده از دستور git add به حالت Staging ببرید و دوباره با استفاده از دستور git commit اونا رو با پیام جدیدی که مدنظرتون هست، Commit کنید.

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

میبینید که از -C (حرف C بزرگ) استفاده کردیم. زمانی که از git reset استفاده میکنیم، HEAD قدیمی بصورت موقت در پوشه .git و در ORIG_HEAD قرار داده میشه که شما میتونین از اون استفاده کنید. با اجرای دستور بالا Commit با متن پیامی که برای Commit تحت ویرایش مشخص کرده بودید، به وجود میاد.

اگر بخواید از متن همون Commit قبلی استفاده کنید ولی میخواید تغییراتی در اون به وجود بیارید میتونین از -c (حرف c کوچک) استفاده کنید. با اینکار ویرایشگر پیش فرضی که برای git انتخاب کردید باز میشه و متن commit قبلی در اون نمایش داده میشه و میتونین اون رو ویرایش کرده و بعد از اون Commit رو به وجود بیارید.

اگر نخواید از اطلاعات commit قبلی استفاده کنید، میتونین با استفاده از دستور زیر بصورت معمولی متن مورد نظرتون رو برای commit قرار بدین:

به همین راحتی.

تغییر دادن commit در Remote

تا اینجای کار هر چیزی که گفته شد مربوط به local بود و چیزی بود که بر روی سیستم شما قرار دارد و هنوز به Remote فرستاده یا Push نشده است. اگر Commit اشتباهی که به وجود آوردید رو Push کرده‌اید باید یک مرحله بیشتر رو انجام بدین. برای اینکار باید دستور زیر رو اجرا کنید:

مثلا در کد بالا بجای <remote> از remote و بجای <branch> از master استفاده میکنیم. بجای --force هم میتونیم از خلاصه شده اون یعنی -f استفاده کنیم. با اینکار تغییرات local شما به remote فرستاده میشه و با اولویت بالا Rewrite میشن. پس حواستون باشه که اشتباهی از این دستور استفاده نکنید چون اگر اطلاعاتی که در remote هست به روزتر از اطلاعات local باشه، بعضی از اطلاعات شما از دست میره.

همچنین در مواردی که بصورت تیمی کار میکنید و چنین تغییری رو به وجود میارید باید با دقت برای دیگر اعضای تیم هم کارها رو پیش ببرید تا تاریخچه git اونا به هم نریزه و مشکلی پیش نیاد. در این مورد میتونین این لینک رو مطالعه کنید.

نتیجه گیری

در این مطلب نحوه بازگردانی یا Undo کردن آخرین Commit در Git رو با هم بررسی کردیم و دیدیم که چگونه میتونیم هم بصورت local و هم بصورت Remote متن پیام Commit و فایلهای درون Commit رو ویرایش کنیم و تغییرات رو در پروژه قرار بدیم. بصورت کلی در این مطلب نحوه تغییر دادن Commit توضیح داده شده است.

اگر شما هم روشی برای انجام این کار دارید خوشحال میشم که با من و دیگر اعضای سون‌ لرن به اشتراک بذارید.

comment دیدگاه کاربران

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.