مقدمه

بسیاری از مشکلات و سردرگمی‌های روزمره در کار با گیت، در پوشه کاری (Working Directory) رخ می‌دهند؛ یعنی جایی که شما فایل‌های خود را مستقیماً ویرایش می‌کنید. این مشکلات معمولاً مربوط به تغییرات کامیت‌نشده، از دست دادن ناخواسته کد، یا عدم توانایی در جابجایی بین برنچ‌ها هستند.

خوشبختانه، گیت ابزارهای دقیقی برای مدیریت این وضعیت‌ها در اختیار ما قرار می‌دهد. در این درس، به بررسی چند مورد از شایع‌ترین این مشکلات و راه‌حل‌های آن‌ها می‌پردازیم.

مشکل ۱: خطای "local changes... would be overwritten"

علامت: شما تلاش می‌کنید با git checkout برنچ را عوض کنید یا با git pull تغییرات جدید را دریافت کنید، اما با خطایی مشابه این مواجه می‌شوید: error: Your local changes to the following files would be overwritten by checkout...

علت: شما در پوشه کاری خود تغییراتی دارید که هنوز کامیت نکرده‌اید. گیت برای جلوگیری از اینکه این تغییرات با تغییرات جدید بازنویسی و برای همیشه از دست بروند، جلوی عملیات را می‌گیرد. این یک ویژگی ایمنی است، نه یک باگ.

راه‌حل: قبل از جابجایی بین برنچ‌ها، باید پوشه کاری خود را به یک وضعیت «تمیز» برسانید. شما سه انتخاب اصلی دارید:

  • کامیت کردن تغییرات: اگر تغییرات شما یک واحد کاری کامل و منطقی هستند، بهترین کار کامیت کردن آن‌هاست.
    git add .
    git commit -m "Finish feature X"
  • کنار گذاشتن موقت تغییرات (Stash): اگر کار شما نیمه‌تمام است و آماده کامیت نیست، از git stash استفاده کنید. این دستور تغییرات شما را موقتاً در یک انبار امن ذخیره کرده و پوشه کاری را تمیز می‌کند.
    git stash
    پس از اتمام کارتان در برنچ دیگر، می‌توانید با git stash pop تغییرات را بازگردانید.
  • دور ریختن تغییرات: اگر به تغییرات فعلی خود اهمیتی نمی‌دهید و فقط می‌خواهید از شر آن‌ها خلاص شوید، می‌توانید با دستور زیر تمام تغییرات کامیت‌نشده را پاک کنید. هشدار: این عمل غیرقابل بازگشت است.
    git checkout -- .

مشکل ۲: بازیابی یک فایل حذف‌شده یا تغییریافته

علامت: شما به اشتباه یک فایل را حذف کرده‌اید یا تغییراتی در آن ایجاد کرده‌اید که اشتباه بوده و می‌خواهید به آخرین نسخه کامیت‌شده آن بازگردید. دستور git status آن را به عنوان "deleted" یا "modified" نشان می‌دهد.

علت: فایل در سیستم شما تغییر کرده، اما گیت وضعیت سالم آن را در آخرین کامیت به خاطر دارد.

راه‌حل: برای بازگرداندن یک فایل خاص به وضعیت آخرین کامیت، از دستور git checkout به همراه دو خط تیره (--) استفاده کنید. این دو خط تیره به گیت می‌فهماند که شما قصد کار با یک فایل را دارید، نه یک برنچ.

git checkout -- path/to/your/file.txt

این دستور فایل را از دیتابیس گیت بازیابی کرده و جایگزین نسخه فعلی در پوشه کاری شما می‌کند.

مشکل ۳: یک فایل را به اشتباه Stage کرده‌ام

علامت: شما به اشتباه یک فایل را با git add به Staging Area اضافه کرده‌اید و حالا در بخش «Changes to be committed» قرار دارد، اما نمی‌خواهید آن را کامیت کنید.

علت: شما فایلی را برای کامیت بعدی آماده کرده‌اید که نباید بخشی از آن باشد.

راه‌حل: برای خارج کردن یک فایل از Staging Area (بدون از دست دادن تغییرات آن در پوشه کاری)، از دستور git reset استفاده کنید:

git reset HEAD path/to/your/file.txt

این دستور فایل را از Staging Area خارج کرده و آن را به بخش «Changes not staged for commit» بازمی‌گرداند. تغییرات شما در فایل همچنان دست‌نخورده باقی می‌مانند.