আপনি সূচীতে যুক্ত হওয়া কোনও ফাইল পুনরুদ্ধার করতে সক্ষম হবেন (উদাহরণস্বরূপ, আপনার পরিস্থিতিতে যেমন রয়েছে git add .
) যদিও এটি কিছুটা কাজ হতে পারে। সূচীতে কোনও ফাইল যুক্ত করার জন্য, গিটটি এটিকে অবজেক্ট ডাটাবেসে যুক্ত করে, যার অর্থ এটি এতক্ষণ পুনরুদ্ধার করা যায় যেহেতু আবর্জনা সংগ্রহ এখনও হয়নি। জাকুব নারাবস্কির উত্তরে এখানে কীভাবে এটি করা যায় তার একটি উদাহরণ রয়েছে :
যাইহোক, আমি চেষ্টা করেছিলাম এটি একটি পরীক্ষার সংগ্রহস্থলটি দেখেছি এবং বেশ কয়েকটি সমস্যা ছিল - --cached
হওয়া উচিত --cache
এবং আমি খুঁজে পেয়েছি যে এটি আসলে .git/lost-found
ডিরেক্টরিটি তৈরি করে নি । তবে, নিম্নলিখিত পদক্ষেপগুলি আমার পক্ষে কাজ করেছে:
git fsck --cache --unreachable $(git for-each-ref --format="%(objectname)")
এটি সেই অবজেক্ট ডাটাবেসের সমস্ত অবজেক্টকে আউটপুট করা উচিত যা কোনও রেফ, সূচীতে বা রিফ্লগের মাধ্যমে পৌঁছনীয় নয়। আউটপুটটি এরকম কিছু দেখবে:
unreachable blob 907b308167f0880fb2a5c0e1614bb0c7620f9dc3
unreachable blob 72663d3adcf67548b9e0f0b2eeef62bce3d53e03
... এবং এই প্রতিটি ব্লবের জন্য আপনি এটি করতে পারেন:
git show 907b308
ফাইলের বিষয়বস্তু আউটপুট করতে।
খুব বেশি আউটপুট?
নীচে সেহের মন্তব্যের জবাবে আপডেট করুন:
যদি আপনি দেখতে পান যে আপনার কাছে অনেক কমিট এবং গাছ রয়েছে সেই আদেশ থেকে আউটপুটে তালিকাভুক্ত, আপনি আউটপুট থেকে অপ্রকাশিত কমিটস থেকে রেফারেন্সযুক্ত যে কোনও অবজেক্টটি অপসারণ করতে চাইতে পারেন। (সাধারণত আপনি যেভাবেই রিফ্লগের মাধ্যমে এই প্রতিশ্রুতিগুলিতে ফিরে আসতে পারেন - আমরা কেবল সূচিগুলিতে যুক্ত হওয়া বিষয়গুলিতে আগ্রহী কিন্তু কোন প্রতিশ্রুতিবদ্ধতার মাধ্যমে খুঁজে পাওয়া যায় না can)
প্রথমে কমান্ডের আউটপুট সংরক্ষণ করুন:
git fsck --cache --unreachable $(git for-each-ref --format="%(objectname)") > all
এখন এই অচিহ্নিতযোগ্য কমিটের অবজেক্টের নামগুলি এর সাথে পাওয়া যাবে:
egrep commit all | cut -d ' ' -f 3
সুতরাং আপনি কেবলমাত্র গাছ এবং অবজেক্টগুলি সূচকগুলিতে যুক্ত করেছেন, তবে কোনও মুহুর্তে প্রতিশ্রুতিবদ্ধ নেই এটি সহ:
git fsck --cache --unreachable $(git for-each-ref --format="%(objectname)") \
$(egrep commit all | cut -d ' ' -f 3)
এটি আপনাকে বিবেচনা করতে হবে এমন অবজেক্টের সংখ্যা হ্রাস করে।
আপডেট: নীচে ফিলিপ ওকলি বিবেচনার জন্য অবজেক্টের সংখ্যা কেটে নেওয়ার অন্য উপায়ের পরামর্শ দেয়, যা কেবলমাত্র অধীনে সর্বাধিক সংশোধিত ফাইলগুলি বিবেচনা করা .git/objects
। আপনি এটির সাথে এটি পেতে পারেন:
find .git/objects/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort
(আমি এই find
অনুরোধটি এখানে পেয়েছি )) সেই তালিকার শেষটি দেখতে দেখতে দেখতে পাবেন:
2011-08-22 11:43:43.0234896770 .git/objects/b2/1700b09c0bc0fc848f67dd751a9e4ea5b4133b
2011-09-13 07:36:37.5868133260 .git/objects/de/629830603289ef159268f443da79968360913a
কোন ক্ষেত্রে আপনি এই বিষয়গুলি সাথে দেখতে পারেন:
git show b21700b09c0bc0fc848f67dd751a9e4ea5b4133b
git show de629830603289ef159268f443da79968360913a
(নোট করুন যে /
অবজেক্টের নাম পেতে আপনাকে পাথের শেষে সরাতে হবে))