مقدمه

حتی باتجربه‌ترین توسعه‌دهندگان نیز گاهی با خطاها و موقعیت‌های گیج‌کننده در گیت روبرو می‌شوند. نکته کلیدی، ترسیدن از این خطاها نیست، بلکه دانستن نحوه تشخیص و برطرف کردن آن‌هاست. این فصل به عنوان یک راهنمای عیب‌یابی برای برخی از رایج‌ترین مشکلاتی که ممکن است با آن‌ها مواجه شوید، عمل می‌کند.

در این درس، به بررسی مشکلاتی می‌پردازیم که در سطح خود مخزن (Repository) رخ می‌دهند. این خطاها معمولاً مربوط به راه‌اندازی اولیه، پیکربندی ریموت‌ها و مسائل مربوط به دسترسی هستند.

مشکل ۱: خطای "fatal: not a git repository"

علامت: شما یک دستور گیت مانند git status را در ترمینال اجرا می‌کنید و با این پیام مواجه می‌شوید: fatal: not a git repository (or any of the parent directories): .git

علت: این یکی از ساده‌ترین خطاهاست و به این معنی است که شما در مسیری از سیستم خود هستید که یک مخزن گیت نیست (یعنی پوشه مخفی .git در آن یا پوشه‌های بالاتر وجود ندارد).

راه‌حل:

  • ابتدا مطمئن شوید که با دستور cd در مسیر صحیح پروژه خود قرار دارید.
  • اگر این یک پروژه جدید است، باید ابتدا با دستور git init آن را به یک مخزن گیت تبدیل کنید.
  • اگر پروژه را به صورت فایل ZIP از جایی مانند گیت‌هاب دانلود کرده‌اید، به یاد داشته باشید که این روش تاریخچه گیت را به همراه ندارد. شما باید پروژه را با دستور git clone کلون کنید تا یک مخزن کامل داشته باشید.

مشکل ۲: خطای "fatal: remote origin already exists"

علامت: شما تلاش می‌کنید با دستور git remote add origin <URL> یک ریموت جدید اضافه کنید و با این خطا مواجه می‌شوید.

علت: این پیام به وضوح می‌گوید که یک ریموت با نام origin از قبل برای این مخزن تعریف شده است. این اتفاق معمولاً زمانی می‌افتد که شما پروژه را clone کرده باشید (که به طور خودکار origin را تنظیم می‌کند) یا قبلاً این دستور را اجرا کرده باشید.

راه‌حل:

  • ابتدا با دستور git remote -v لیست ریموت‌های موجود و آدرس آن‌ها را بررسی کنید.
  • اگر آدرس origin اشتباه است، نیازی به حذف و اضافه کردن مجدد آن نیست. کافیست آدرس آن را با دستور زیر به‌روز کنید:
    git remote set-url origin <NEW_URL>
  • اگر واقعاً می‌خواهید آن را با یک ریموت کاملاً جدید جایگزین کنید، ابتدا آن را حذف کرده و سپس اضافه نمایید:
    git remote remove origin
    git remote add origin <URL>

مشکل ۳: خطای دسترسی (Permission Denied / Authentication Failed)

علامت: هنگام push یا pull از یک مخزن خصوصی، با خطاهایی مانند Permission denied یا Authentication failed روبرو می‌شوید.

علت: این خطا یعنی گیت‌هاب هویت شما را تایید نکرده یا شما اجازه دسترسی به آن مخزن خاص را ندارید. دلایل رایج عبارتند از: عدم تنظیم صحیح کلیدهای SSH، منقضی شدن توکن دسترسی شخصی (PAT)، یا عدم عضویت شما به عنوان همکار (Collaborator) در آن مخزن.

راه‌حل:

  • بررسی دسترسی: از صاحب مخزن بخواهید تا مطمئن شود که شما را در بخش Settings > Collaborators به پروژه اضافه کرده است.
  • بررسی روش اتصال: با دستور git remote -v آدرس ریموت را ببینید. اگر با https:// شروع می‌شود، شما از پروتکل HTTPS استفاده می‌کنید و باید مطمئن شوید توکن دسترسی شخصی شما معتبر است. اگر با git@github.com: شروع می‌شود، شما از پروتکل SSH استفاده می‌کنید و باید مطمئن شوید کلید SSH شما به درستی در حساب گیت‌هاب شما ثبت شده است.

مشکل ۴: پوشه .git را به اشتباه حذف کرده‌ام!

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

علت: شما به صورت دستی پوشه مخفی .git را حذف کرده‌اید. این پوشه، دیتابیس کامل مخزن شما بود.

راه‌حل:

  • اگر یک نسخه پشتیبان روی ریموت دارید: این بهترین سناریو است. پوشه فعلی پروژه خود را به یک نام دیگر تغییر دهید (مثلاً my-project-broken). سپس پروژه را دوباره از گیت‌هاب clone کنید. در نهایت، فایل‌هایی را که در نسخه قدیمی تغییر داده بودید و هنوز push نکرده بودید، با دقت از پوشه خراب به پوشه جدید و سالم کپی کنید.
  • اگر هیچ نسخه پشتیبانی روی ریموت ندارید: متاسفانه تاریخچه گیت شما از بین رفته است. تنها راه این است که با git init یک مخزن جدید بسازید و فایل‌های فعلی خود را به عنوان اولین کامیت در این تاریخچه جدید ثبت کنید. این اتفاق، اهمیت push کردن منظم به یک سرور ریموت را به خوبی نشان می‌دهد.