Revert — خنثیسازی امن کامیتها
برگرداندن امن تغییرات با ساخت کامیت معکوس — بهترین روش undo برای تاریخچههای اشتراکی و push شده.
Revert چیست؟
git revert یک کامیت را خنثی میکند — اما نه با حذف آن! بلکه با ساخت یک کامیت جدید که دقیقاً برعکس تغییرات قبلی عمل میکند. مثل پخش کردن یک ویدیو به عقب و ضبطش بهعنوان ویدیوی جدید.
چرا Revert امنترین undo است؟
تاریخچه گیت مثل یک دفترچه ثبت است — نوشتهها پاک نمیشوند، فقط نوشته جدید اضافه میشود:
- ✅ هیچ کامیتی حذف نمیشود — تاریخچه دستنخورده میماند
- ✅ برای شاخههای اشتراکی (push شده) امن است
- ✅ همکارانی که کد را دارند، با pull ساده همگام میشوند
- ✅ اگر اشتباه بود، خود revert را هم میشود revert کرد! 😄
استفاده از revert
# خنثی کردن آخرین کامیت:
git revert HEAD
# خروجی:
# [main f6e5d4c] Revert "افزودن فرم تماس"
# 1 file changed, 12 deletions(-)
یک کامیت جدید ساخته شد که تغییرات «افزودن فرم تماس» را برمیگرداند.
خنثی کردن کامیت خاص
git revert a1b2c3d
خنثی کردن چند کامیت (بدون کامیتهای میانی)
git revert a1b2c3d e5f6g7h
خنثی کردن یک بازه
# از قدیمی به جدید (توجه به ترتیب!):
git revert OLDER^..NEWER
# مثال:
git revert a1b2c3d^..e5f6g7h
revert با تعارض
اگر کامیتهای بعدی روی همان بخشها کار کرده باشند، revert تعارض میدهد — همان فرایند حل تعارض معمولی:
git revert HEAD
# error: could not revert a1b2c3d...
# hint: after resolving the conflicts, mark the corrected paths
# hint: with "git add <paths>" and commit the result
- فایلهای تعارضدار را حل کنید
git add .git revert --continue(یا برای فرار:git revert --abort)
سوئیچ --no-commit
اگر میخواهید چند revert را در یک کامیت جمع کنید:
git revert --no-commit a1b2c3d
git revert --no-commit e5f6g7h
git commit -m "خنثی کردن دو کامیت باگدار"
revert یا reset؟ (پیشنمایش)
| ویژگی | revert | reset |
|---|---|---|
| تاریخچه | حفظ میشود + کامیت جدید | بازنویسی/حذف میشود! |
| برای شاخه push شده | ✅ امن | ❌ خطرناک |
| برگرداندن به گذشته دور | کامیتهای معکوس زیاد | یکجا ✅ |
در مبحث بعدی reset را کامل یاد میگیرید.
خلاصه
git revert <کامیت>کامیت معکوس میسازد- تاریخچه دستنخورده میماند — امن برای تیم
HEAD= آخرین کامیت- قانون سرانگشتی: اگر push کردهاید، revert کنید
این مبحث بخشی از دوره آموزش کامل Git است.