Gitبرنامه نویسی Programming

دکمه Undo در Git؛ برگرداندن تغییرات و Commitها

Chapter 7: Press the Undo Button

یکی از رایج‌ترین دغدغه‌ها هنگام کار با Git این است: «اگر اشتباه کردم چه؟» در ظاهر، Git دکمه‌ی Undo مثل نرم‌افزارهای دیگر ندارد. اما حقیقت این است که Git ابزارهای قدرتمندی دارد که به شما اجازه می‌دهد تغییرات را به عقب برگردانید، Commitها را ویرایش کنید یا حتی تاریخچه را بازنویسی کنید.

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

سطوح مختلف تغییرات در Git

قبل از بررسی دستورات Undo، باید بدانیم تغییرات در کجا اتفاق می‌افتند:

  1. Working Directory → تغییرات ذخیره‌شده روی فایل‌های سیستم شما.
  2. Staging Area → تغییرات آماده Commit.
  3. Repository (Commits) → تغییرات ثبت‌شده در تاریخچه پروژه.

هر سطح روش‌های خاص خود برای Undo دارد.

areas

بازگرداندن تغییرات در Working Directory

لغو تغییرات فایل قبل از Stage

اگر فایلی را تغییر داده‌اید اما هنوز git add نکرده‌اید:

git checkout -- filename

یا (در نسخه‌های جدیدتر Git):

git restore filename

این کار فایل را به آخرین نسخه ذخیره‌شده (HEAD) برمی‌گرداند.

بازگرداندن تغییرات در Staging Area

حذف فایل از Stage (بدون حذف تغییرات)

اگر فایلی را git add کرده‌اید اما هنوز نمی‌خواهید Commit کنید:

git reset filename

یا در نسخه‌های جدیدتر:

git restore --staged filename

تغییرات همچنان در Working Directory باقی می‌مانند.

بازگرداندن Commitها

1. اصلاح آخرین Commit (Amend)

اگر Commit کرده‌اید اما پیام یا فایل‌ها درست نیستند:

git commit --amend
  • می‌توانید پیام Commit را تغییر دهید.
  • می‌توانید فایل‌های جدید اضافه کنید.

2. بازگرداندن یک Commit (Revert)

برای لغو تغییرات یک Commit خاص بدون تغییر تاریخچه:

git revert <commit-hash>

یک Commit جدید ایجاد می‌شود که تغییرات Commit موردنظر را برعکس می‌کند.

3. بازنشانی به یک Commit قبلی (Reset)

git reset --hard <commit-hash>

این دستور تاریخچه را بازنویسی می‌کند و تغییرات بعد از آن Commit حذف می‌شوند.

  • --soft → تغییرات در Staging Area باقی می‌مانند.
  • --mixed (پیش‌فرض) → تغییرات به Working Directory برمی‌گردند.
  • --hard → همه چیز به آن Commit بازنشانی می‌شود.

هشدار: استفاده از reset --hard خطرناک است چون تغییرات حذف می‌شوند.

بهترین رویکرد برای Undo در Git

  • اگر می‌خواهید بدون تغییر تاریخچه اصلاح کنید → git revert.
  • اگر Commit هنوز Push نشده و فقط روی سیستم شماست → git commit --amend یا git reset.
  • اگر فقط فایل‌ها را تغییر داده‌اید → git restore یا git checkout.

مقایسه دستورات Undo در Git

سطح تغییر دستور پیشنهادی توضیح
Working Directory git restore filename برگرداندن فایل به آخرین نسخه Commit شده
Staging Area git restore --staged filename حذف فایل از Stage
آخرین Commit git commit --amend اصلاح پیام یا اضافه‌کردن فایل
Commit خاص git revert <hash> ایجاد Commit معکوس
تاریخچه کامل git reset --hard <hash> بازنویسی تاریخچه و حذف تغییرات

جمع‌بندی

  • Git دکمه‌ی Undo ساده ندارد، اما ابزارهای قدرتمند زیادی دارد.
  • برای تغییرات محلی از git restore یا git checkout استفاده کنید.
  • برای اصلاح Commit اخیر از git commit --amend کمک بگیرید.
  • برای لغو تغییرات در تاریخچه، بهترین گزینه‌ی امن git revert است.
  • در نهایت، اگر می‌خواهید تاریخچه را بازنویسی کنید، از git reset استفاده کنید (با احتیاط).

در فصل بعد (Chapter 8: Branching) یاد می‌گیریم چگونه با استفاده از شاخه‌ها (Branches) به صورت همزمان روی ویژگی‌های مختلف کار کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا