تقریباً همه اشتباه commit میکنند، فایل را پاک میکنند یا push نادرست میزنند. خبر خوب این است که Git معمولاً راه برگشت دارد؛ به شرطی که نوع اشتباه را درست تشخیص دهید.
reset نرم، mixed و hard
git reset --soft HEAD~1
git reset HEAD~1
git reset --hard HEAD~1
soft فقط اشارهگر برنچ را عقب میبرد و تغییرات staged میمانند. mixed (پیشفرض) تغییرات unstaged میشوند. hard تغییرات را دور میریزد؛ روی کار منتشرنشده خطرناک است. هرگز hard را روی commitهایی که دیگران pull کردهاند بدون هماهنگی استفاده نکنید.
revert برای تاریخچه عمومی
git revert
revert یک commit جدید میسازد که اثر commit قبلی را خنثی میکند. برای main مشترک امنتر از reset است چون تاریخچه را بازنویسی نمیکند.
stash
git stash push -m 'wip'
git stash list
git stash pop
stash تغییرات ناتمام را کنار میگذارد تا بتوانید سریع برنچ عوض کنید. stash pop اعمال و حذف از لیست است؛ اگر conflict شد، stash هنوز در list میماند تا پاکش کنید.
reflog؛ آخرین امید
git reflog
git switch -c recovery HEAD@{3}
reflog حرکتهای HEAD محلی را نگه میدارد. حتی بعد از hard reset اغلب میتوانید commit را پیدا و بازیابی کنید تا قبل از expire شدن reflog.
اگر میخواهید بعد از یادگیری این مفاهیم، مسیر استقرار را سریعتر جلو ببرید، میتوانید از پروژه ابری هوشمند هوشگراف هم استفاده کنید؛ اما مبانی این مقاله مستقل از هر پلتفرمی برای کار روزمره مفید است.
نکات عملی بیشتر درباره بازیابی اشتباهات Git
وقتی روی بازیابی اشتباهات Git کار میکنید، مهمترین اصل این است که هر تغییر را قابلبرگشت نگه دارید. یعنی قبل از اجرای دستور مخرب، خروجی را در فایل لاگ ذخیره کنید، از کانفیگ بکاپ بگیرید و اگر روی سرور production هستید، ابتدا روی staging تمرین کنید. بسیاری از خطاهای پرهزینه فقط بهخاطر عجله و نبود چکلیست ساده رخ میدهند.
یک عادت خوب این است که برای هر سناریوی پرتکرار یک runbook کوتاه داشته باشید: علائم مشکل، دستور تشخیص، اقدام اصلاحی، و معیار موفقیت. این runbook لازم نیست رسمی باشد؛ حتی یک فایل Markdown در ریپو هم کافی است تا تیم یکسان عمل کند.
در محیطهای ایران، محدودیت شبکه، latency رجیستری و قطعی لحظهای DNS هم باید در runbook بیاید. اگر دستوری به اینترنت وابسته است، مسیر جایگزین یا کش محلی را از قبل مشخص کنید.
اشتباهات رایجی که باید از آنها دوری کنید
- کپیکردن دستور از اینترنت بدون فهم پارامترها
- اجرای دستور مخرب روی production بدون بکاپ
- نادیده گرفتن لاگ و فقط نگاه به پیام خطای اول
- تغییر همزمان چند لایه (شبکه + سرویس + فایروال) بدون جداسازی تست
- ذخیره secret داخل ریپو یا اسکریپتهای عمومی
چکلیست جمعبندی
قبل از بستن کار روی بازیابی اشتباهات Git، این موارد را مرور کنید: آیا تغییر مستند شد؟ آیا rollback مشخص است؟ آیا مانیتورینگ یا حداقل یک healthcheck ساده وضعیت را نشان میدهد؟ آیا دسترسیها حداقل لازم هستند؟ اگر پاسخ هر کدام منفی است، کار را تمامشده فرض نکنید.
یادگیری عمیق زمانی رخ میدهد که بعد از هر حادثه، یک یادداشت کوتاه بنویسید: چه دیدید، چه فرضی اشتباه بود، و دفعه بعد چه میکنید. این چرخه از دهها دوره آموزشی سطحی مؤثرتر است.
نکات عملی بیشتر درباره بازیابی اشتباهات Git
وقتی روی بازیابی اشتباهات Git کار میکنید، مهمترین اصل این است که هر تغییر را قابلبرگشت نگه دارید. یعنی قبل از اجرای دستور مخرب، خروجی را در فایل لاگ ذخیره کنید، از کانفیگ بکاپ بگیرید و اگر روی سرور production هستید، ابتدا روی staging تمرین کنید. بسیاری از خطاهای پرهزینه فقط بهخاطر عجله و نبود چکلیست ساده رخ میدهند.
یک عادت خوب این است که برای هر سناریوی پرتکرار یک runbook کوتاه داشته باشید: علائم مشکل، دستور تشخیص، اقدام اصلاحی، و معیار موفقیت. این runbook لازم نیست رسمی باشد؛ حتی یک فایل Markdown در ریپو هم کافی است تا تیم یکسان عمل کند.
در محیطهای ایران، محدودیت شبکه، latency رجیستری و قطعی لحظهای DNS هم باید در runbook بیاید. اگر دستوری به اینترنت وابسته است، مسیر جایگزین یا کش محلی را از قبل مشخص کنید.
اشتباهات رایجی که باید از آنها دوری کنید
- کپیکردن دستور از اینترنت بدون فهم پارامترها
- اجرای دستور مخرب روی production بدون بکاپ
- نادیده گرفتن لاگ و فقط نگاه به پیام خطای اول
- تغییر همزمان چند لایه (شبکه + سرویس + فایروال) بدون جداسازی تست
- ذخیره secret داخل ریپو یا اسکریپتهای عمومی
چکلیست جمعبندی
قبل از بستن کار روی بازیابی اشتباهات Git، این موارد را مرور کنید: آیا تغییر مستند شد؟ آیا rollback مشخص است؟ آیا مانیتورینگ یا حداقل یک healthcheck ساده وضعیت را نشان میدهد؟ آیا دسترسیها حداقل لازم هستند؟ اگر پاسخ هر کدام منفی است، کار را تمامشده فرض نکنید.
یادگیری عمیق زمانی رخ میدهد که بعد از هر حادثه، یک یادداشت کوتاه بنویسید: چه دیدید، چه فرضی اشتباه بود، و دفعه بعد چه میکنید. این چرخه از دهها دوره آموزشی سطحی مؤثرتر است.
نکات عملی بیشتر درباره بازیابی اشتباهات Git
وقتی روی بازیابی اشتباهات Git کار میکنید، مهمترین اصل این است که هر تغییر را قابلبرگشت نگه دارید. یعنی قبل از اجرای دستور مخرب، خروجی را در فایل لاگ ذخیره کنید، از کانفیگ بکاپ بگیرید و اگر روی سرور production هستید، ابتدا روی staging تمرین کنید. بسیاری از خطاهای پرهزینه فقط بهخاطر عجله و نبود چکلیست ساده رخ میدهند.
یک عادت خوب این است که برای هر سناریوی پرتکرار یک runbook کوتاه داشته باشید: علائم مشکل، دستور تشخیص، اقدام اصلاحی، و معیار موفقیت. این runbook لازم نیست رسمی باشد؛ حتی یک فایل Markdown در ریپو هم کافی است تا تیم یکسان عمل کند.
در محیطهای ایران، محدودیت شبکه، latency رجیستری و قطعی لحظهای DNS هم باید در runbook بیاید. اگر دستوری به اینترنت وابسته است، مسیر جایگزین یا کش محلی را از قبل مشخص کنید.
اشتباهات رایجی که باید از آنها دوری کنید
- کپیکردن دستور از اینترنت بدون فهم پارامترها
- اجرای دستور مخرب روی production بدون بکاپ
- نادیده گرفتن لاگ و فقط نگاه به پیام خطای اول
- تغییر همزمان چند لایه (شبکه + سرویس + فایروال) بدون جداسازی تست
- ذخیره secret داخل ریپو یا اسکریپتهای عمومی
چکلیست جمعبندی
قبل از بستن کار روی بازیابی اشتباهات Git، این موارد را مرور کنید: آیا تغییر مستند شد؟ آیا rollback مشخص است؟ آیا مانیتورینگ یا حداقل یک healthcheck ساده وضعیت را نشان میدهد؟ آیا دسترسیها حداقل لازم هستند؟ اگر پاسخ هر کدام منفی است، کار را تمامشده فرض نکنید.
یادگیری عمیق زمانی رخ میدهد که بعد از هر حادثه، یک یادداشت کوتاه بنویسید: چه دیدید، چه فرضی اشتباه بود، و دفعه بعد چه میکنید. این چرخه از دهها دوره آموزشی سطحی مؤثرتر است.
نکات عملی بیشتر درباره بازیابی اشتباهات Git
وقتی روی بازیابی اشتباهات Git کار میکنید، مهمترین اصل این است که هر تغییر را قابلبرگشت نگه دارید. یعنی قبل از اجرای دستور مخرب، خروجی را در فایل لاگ ذخیره کنید، از کانفیگ بکاپ بگیرید و اگر روی سرور production هستید، ابتدا روی staging تمرین کنید. بسیاری از خطاهای پرهزینه فقط بهخاطر عجله و نبود چکلیست ساده رخ میدهند.
یک عادت خوب این است که برای هر سناریوی پرتکرار یک runbook کوتاه داشته باشید: علائم مشکل، دستور تشخیص، اقدام اصلاحی، و معیار موفقیت. این runbook لازم نیست رسمی باشد؛ حتی یک فایل Markdown در ریپو هم کافی است تا تیم یکسان عمل کند.
در محیطهای ایران، محدودیت شبکه، latency رجیستری و قطعی لحظهای DNS هم باید در runbook بیاید. اگر دستوری به اینترنت وابسته است، مسیر جایگزین یا کش محلی را از قبل مشخص کنید.
نظرات
هنوز نظری ثبت نشده. دیدگاهتان را بنویسید.