چطوری پیام commit گیت رو تغییر بدیم

چطوری پیام commit گیت رو تغییر بدیم

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

تغییر آخرین commit

دستور git commit --amend به شما اجازه میده تا پیام آخرین  commit رو تغییر بدید.

کامیت push نشده

برای تغییرپیام آخرین commit ی که به مخزن remote پوش نشده است مجددا آن را با استفاده از فلگ --amend کامیت کنید.

  1. به پوشه روت مخزن گیت خود برید.
  2. دستور زیر رو اجرا کنید تا پیام آخرین commit رو تغییر بدید.

git commit --amend -m "New commit message."

کاری که این دستور انجام می دهد: آخرین commit ی که داشتید را با یک commit جدید بازنویسی می کنه.

یادآوری: گزینه -m برای نوشتن پیام جدید در خط دستور است تا نیازی به باز کردن ویرایشگر متن نداشته باشید.

قبل از اینکه پیام commit رو تغییر بدید شما می توانید تغییرات دیگری رو نیز که قبلا فراموش کرده بودید به اون اضافه کنید:

git add .

git commit --amend -m "New commit message."

commit پوش شده

commit تغییر یافته (amend شده) یک موجودیت جدید با SHA-1 متفاوت است. کامیت قبلی در برنچ جاری موجود نخواهد بود.

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

اگر شما پیام آخرین commit پوش شده خود را تغییر دادید باید آن را مجبور کنید که push شود.

  1. به پوشه روت مخزن خود بروید
  2. پیام آخرین commit پوش شده را amend کنید
  3. اجبار کنید تاریخچه مخزن remote بروزرسانی شود.

git commit --amend -m "New commit message."

git push --force <remoteName> <branchName>

تغییر یک یا چند commit قدیمی تر

اگر شما نیاز دارید پیام یک یا چند commit قدیمی تر رو تغییر بدید شما می توانید از دستور git rebase استفاده کنید تا یک یا چند commit قدیمی تر رو تغییر بدید.

دستور rebase تاریخچه commit رو بازنویسی می کنه و به شدت پیشنهاد میشه از rebase کردن commit هایی که قبلا push شدن خودداری کنید.

*) به پوشه root مخزن کد خود بروید

*) دستور git rebase -i HEAD~N را تایپ کنید که N تعداد commit هایی است که می خواهید rebase کنید. مثلا اگر شما می خواهید commit های 4 ام و 5 ام را تغییر دهید دستور زیر را وارد کنید:

git rebase -i HEAD~5

دستور بالا x کامیت آخر را به صورت زیر نشان می دهد:

pick 43f8707f9 fix: update dependency json5 to ^2.1.1
pick cea1fb88a fix: update dependency verdaccio to ^4.3.3
pick aa540c364 fix: update dependency webpack-dev-server to ^3.8.2
pick c5e078656 chore: update dependency flow-bin to ^0.109.0
pick 11ce0ab34 fix: Fix spelling.

# Rebase 7e59e8ead..11ce0ab34 onto 7e59e8ead (5 commands)

*) خط هایی که می خواید در پیام commit تغییر بدید رو مشخص کنید و pick رو با reword جایگزین کنید:

reword 43f8707f9 fix: update dependency json5 to ^2.1.1
reword cea1fb88a fix: update dependency verdaccio to ^4.3.3
pick aa540c364 fix: update dependency webpack-dev-server to ^3.8.2
pick c5e078656 chore: update dependency flow-bin to ^0.109.0
pick 11ce0ab34 fix: Fix spelling.

# Rebase 7e59e8ead..11ce0ab34 onto 7e59e8ead (5 commands)

*) تغییرات رو ذخیره کنید و ویرایشگر رو ببندید

*) برای هر commit مورد نظر یک پنجره ویرایشگر جدید باز خواهد شد. پیام commit رو تغییر بدید فایل رو ذخیره کنید و ویرایشگر رو ببندید.

fix: update dependency json5 to ^2.1.1

*) اجبار کنید که تغییرات  به مخزن remote  پوش بشن

git push --force <remoteName> <branchName>

نتیجه گیری

برای اینکه آخرین پیام commit رو تغییر بدیم از دستور git commit --amend  استفاده می کنیم. برای اینکه پیام commit های قدیمی تر رو تغییر بدیم از git rebase -i HEAD~N استفاده می کنیم.

commit هایی که push شدن رو بهتر است تغییر ندیم چون منجر به مشکلاتی در کار همکاران شما می شن.

منبع:‌https://linuxize.com/post/change-git-commit-message/