مقدمه
بسیاری از مشکلات و سردرگمیهای روزمره در کار با گیت، در پوشه کاری (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 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»
بازمیگرداند. تغییرات شما در فایل همچنان دستنخورده باقی میمانند.