بلاگ هوش‌گراف

استقرار پروژه، DevOps و زیرساخت ابری برای تیم‌های ایرانی

Git 1 دقیقه مطالعه

بازیابی اشتباهات رایج در Git: reset، revert و stash

چطور commit اشتباه، تغییرات گم‌شده و کار ناتمام را با reset، revert، stash و reflog درست کنید.

هوش‌گراف 28 تیر 1405

تقریباً همه اشتباه 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 بیاید. اگر دستوری به اینترنت وابسته است، مسیر جایگزین یا کش محلی را از قبل مشخص کنید.

نظرات

هنوز نظری ثبت نشده. دیدگاه‌تان را بنویسید.

ثبت نظر

ایمیل شما منتشر نمی‌شود. فیلدهای ضروری علامت * دارند.