از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
Git Remove Last Commit – چگونه یک Commit را در Git لغو کنیم
سرفصلهای مطلب
Git یک ابزار قدرتمند و محبوب ترین سیستم کنترل نسخه است. به این صورت است که توسعه دهندگان و تیم های فنی در پروژه ها با یکدیگر همکاری و همکاری می کنند.
اما چه اتفاقی میافتد وقتی بهطور تصادفی فایلی را اجرا میکنید و متوجه میشوید که نباید این کار را میکردید، زیرا آن فایل حاوی خطا است؟
نیازی به نگرانی نیست زیرا Git به شما اجازه می دهد تا اشتباهات خود را لغو کنید و به نسخه قبلی پروژه خود بازگردید.
یکی از مفیدترین ویژگیهای Git این است که میتواند تغییراتی را که در یک پروژه ایجاد میکنید در طول زمان بازگرداند.
در این مقاله یاد خواهید گرفت که چگونه تغییرات در Git را بسته به وضعیت مخزن Git خود لغو کنید.
در اینجا چیزی است که ما پوشش خواهیم داد:
- نحوه لغو تغییرات بدون مرحله محلی
- نحوه لغو تغییرات مرحلهای محلی
- نحوه لغو تغییرات متعهد محلی
- نحوه لغو تغییرات متعهد عمومی
نحوه لغو تغییرات بدون مرحله محلی در Git
بگویید که روی دستگاه محلی خود کار می کنید. شما تغییراتی را در یک فایل به صورت محلی انجام داده و ذخیره کرده اید، اما می خواهید آنها را نادیده بگیرید.
وقتی هنوز آن تغییرات را انجام نداده اید، از آن استفاده نکرده اید git add
فرمان
در این مورد، شما نیاز به استفاده از git restore
فرمان
به طور خاص، git restore
دستور چیزی شبیه به این خواهد بود:
git restore filename
بنابراین، بگویید که شما یک README.md
فایل و شما به طور تصادفی متنی را که می خواهید نادیده بگیرید نوشته و ذخیره کرده اید.
ابتدا می توانید از git status
دستور مشاهده وضعیت مخزن Git شما.
این دستور تایید می کند که فایل بدون مرحله است (به این معنی که شما استفاده نکرده اید git add
هنوز) و به شما امکان می دهد فایل هایی را که ممکن است بخواهید لغو کنید مشاهده کنید:
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
در اینجا نحوه لغو تغییرات در README.md
فایل:
git restore README.md
سپس می توانید استفاده کنید git status
دوباره برای بررسی وضعیت مخزن:
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
اکنون، شما با موفقیت جدیدترین تغییرات خود را کنار گذاشته و به آخرین نسخه تعهد شده پروژه خود بازگشته اید.
نحوه لغو تغییرات مرحلهای محلی در Git
زمانی که شما از آن استفاده کرده اید، یک فایل مرحله بندی می شود git add
فرمان
بنابراین، بگویید که تغییراتی در آن ایجاد کرده اید README.md
فایل به صورت محلی، شما از آن استفاده کردید git add
دستوری که تغییرات را مرحله بندی کرد و سپس متوجه شدید که متن حاوی اشتباهاتی است.
اول، اجرا کنید git status
تا مطمئن شوید که فایل را مرحله بندی کرده اید (یعنی استفاده کرده اید git add
) :
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README.md
همانطور که از خروجی می توانید متوجه شوید git status
، می توانید از دستور زیر برای لغو تغییرات خود استفاده کنید:
git restore --staged filename
این دستور فایل مرحله بندی شده را unstage می کند، اما تغییرات شما را حفظ می کند.
بریم بدویم git status
از نو:
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
اکنون برای حذف تغییراتی که ایجاد کرده اید و فایل را به محتوای اصلی خود بازگردانید، از:
git restore README.md
و بیایید فرار کنیم git status
آخرین بار:
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
اکنون، تغییراتی که ایجاد کرده اید از بین رفته و فایل به نسخه متعهد فعلی برگردانده شده است.
نحوه لغو تغییرات متعهد محلی در Git
مثلاً شما تغییراتی را در یک فایل ایجاد کرده اید، فایل را با آن مرحله بندی کرده اید git add
دستور، و فایل را با git commit
فرمان
این بدان معنی است که commit فقط به صورت محلی وجود دارد و هنوز به یک مخزن راه دور منتقل نشده است.
ابتدا استفاده کنید git status
برای بررسی اینکه آیا فایل را انجام داده اید:
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
در مرحله بعد، اگر می خواهید آخرین commit محلی خود را لغو کنید، از آن استفاده کنید git log
دستور:
آخرین commit دارای یک هش commit (یک سری طولانی از اعداد و کاراکترها) و a (HEAD -> main)
در پایان – این همان تعهدی است که شما به دنبال لغو آن هستید.
کامیت دوم تا آخرین دارای هش commit و a است (origin/main)
در پایان – این commitی است که میخواهید حفظ کنید و تعهدی که به مخزن راه دور منتقل کردهاید.
پس از آن، از دستور زیر برای لغو commit استفاده کنید:
git reset --soft HEAD~
حالا بیایید استفاده کنیم git log
از نو.
باید هش commit را ببینید و a (HEAD -> main, origin/main)
در پایان.
آخرین تعهدی که انجام دادید دیگر بخشی از تاریخچه مخزن نیست و حذف شده است.
دستور بالا همه چیز را به نسخه فایل قبل از آن commit تصادفی یا اشتباه بازیابی کرد و یک commit به عقب برگشت.
بیایید بررسی کنیم git status
از نو
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README.md
به خاطر داشته باشید که اگرچه git reset --soft HEAD~
دستور لغو آخرین commit شما، تغییراتی که ایجاد کرده اید را حفظ کرد.
چگونه تغییرات عمومی متعهد در Git را لغو کنیم
اگر تغییراتی در یک فایل ایجاد کردید، فایل را مرحله بندی کردید git add
، آن را با git command
و آن را به یک مخزن راه دور با git push
– اما بعد متوجه شدید که از ابتدا نباید آن فایل را انجام می دادید؟
بعدش چه کاری میکنی؟
ابتدا استفاده کنید git status
برای بررسی وضعیت مخزن git:
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
در قسمت بالا مشاهده کردید که هر commit یک هش commit دارد که یک سری طولانی از اعداد و کاراکترها است.
برای مشاهده نسخه کوتاه هش commit از دستور زیر استفاده کنید:
git log --oneline
با git log
دستور، همچنین می توانید بررسی کنید که کدام commit را می خواهید لغو کنید.
بگویید که آخرین کامیت شما دارای هش commit است cc3bbf7
، که به دنبال آن است (HEAD -> main, origin/main)
و یک پیام commit مانند “commit README.md file”.
برای لغو آن commit خاص، از دستور زیر استفاده کنید:
git revert cc3bbf7 --no-edit
دستور بالا با ایجاد یک commit جدید و برگرداندن آن فایل به حالت قبلی، تغییرات را خنثی می کند، گویی هرگز تغییر نکرده است.
در نهایت، استفاده کنید git push
برای فشار دادن تغییر به شاخه راه دور.
هنگامی که این کار را انجام دادید، خواهید دید که پیام commit مانند پیام قبلی اما با کلمه خواهد بود revert
قبل از آن، مانند
“تعهد فایل README.md” را برگردانید.
به خاطر داشته باشید که تاریخچه commit هر دو commit را جداگانه نشان می دهد:
Revert "commit README.md file"
@john-doe
john-doe committed 9 minutes ago
commit README.md file
@john-doe
john-doe committed 16 minutes ago
نتیجه
و شما آن را دارید – اکنون می دانید که چگونه تغییرات را در Git لغو کنید.
برای کسب اطلاعات بیشتر در مورد Git، منابع رایگان زیر را بررسی کنید:
- Git و GitHub برای مبتدیان – دوره Crash
- آموزش Git for Professionals – ابزارها و مفاهیم برای تسلط بر کنترل نسخه با Git
- آموزش پیشرفته Git – Rebase تعاملی، Cherry-Picking، Reflog، Submodules و موارد دیگر
ممنون که مطالعه کردید و کدنویسی خوبی داشتید 🙂
منتشر شده در 1402-12-26 20:52:05