اشکال هفته شماره 4

به Pikotutorial بعدی خوش آمدید!
خطایی که امروز با آن روبرو هستیم یک خطای GIT است:
fatal: reference is not a tree
که هنگام تلاش برای کپی کردن پرونده از شعبه دیگر با استفاده از دستور اتفاق می افتد:
git checkout <commit-hash> -- /path/to/file
معنی آن چیست؟
این بدان معناست که تعهد شما ارائه شده توسط GIT به عنوان یک شی معتبر که می تواند برای کپی کردن پرونده استفاده شود ، شناخته نشده است.
چگونه آن را برطرف کنیم؟
مرتکب نادرست هش
ساده ترین دلیل این است که شما فقط یک هش تعهد نامعتبر وارد کرده اید. اطمینان حاصل کنید که هش مورد استفاده شما در واقع با فراخوانی وجود دارد:
git rev-parse <commit-hash>
اگر این دستور هش را برنگرداند ، به این معنی است که وجود ندارد.
کلون کم عمق مخزن
اگر مخزن شما یک کلون کم عمق است (به عنوان مثال سابقه محدودی دارد) ، اگرچه هش تعهد در مبدأ موجود است ، اما اکنون ممکن است در نسخه محلی مخزن شما در دسترس باشد. کلون کل مخزن یا تماس:
git fetch --unshallow
هش
اطمینان حاصل کنید که هش مورد استفاده شما در واقع هش است که نشان دهنده یک تعهد است و نه نوع دیگری از شیء (به عنوان مثال برچسب یا حباب).
پرونده در تعهد داده شده وجود ندارد
ممکن است اتفاق بیفتد که وضعیت مخزن که توسط هشویی که ارائه کرده اید ارائه شده است فقط شامل پرونده مورد نظر شما نیست. می توانید این کار را با استفاده از:
git ls-tree -r <commit-hash> /path/to/file
سوئیچ -r
در این حالت اجازه می دهد تا از طریق همه دایرکتوری ها به صورت بازگشتی جستجو کنند. اگر پرونده شما در تعهد ارائه شده توسط هش ارائه شده شما وجود داشته باشد ، این دستور آن پرونده را لیست می کند.
از نام شعبه به جای تعهد هش استفاده کنید
اگر تعهد دقیق اهمیتی ندارد و تمام آنچه شما می خواهید این است که یکی از پرونده ها را با دولت از شاخه دیگر تراز کنید (به عنوان مثال برای بازگشت تغییرات به حالت Master Branch) ، فقط به جای تعهد دقیق از نام شعبه استفاده کنید هش:
git checkout master -- /path/to/file