যদি আপনার ম্যাক প্রোজেক্ট থেকে কোনো ফাইল কমিট করার আগেই হারিয়ে যায়, তবে প্রথমে ম্যাকের ট্র্যাশ এবং যেকোনো টাইম মেশিন বা ক্লাউড রিকভারি পরীক্ষা করে দেখুন। এরপর গিট পরীক্ষা করুন: ফাইলটি ইনডেক্স বা কমিটে থাকলে এটি মুছে ফেলা ফাইল পুনরুদ্ধার করতে পারে, এবং আনরিচেবল অবজেক্ট হিসেবে সংরক্ষিত কনটেন্টও বের করে আনতে পারে। ফাইলটি যদি কেবল আনসেভড বা আনস্টেজড ওয়ার্কিং-কপির কনটেন্ট হিসেবে থেকে থাকে, তবে গিটে হয়তো এর কোনো কপি নাও থাকতে পারে। প্রোজেক্টে নতুন ফাইল তৈরি করার আগে এই বিষয়গুলো যাচাই করে দেখুন।
১. ট্র্যাশ পরীক্ষা করুন এবং ম্যাকে সার্চ করুন
ডক থেকে ট্র্যাশ খুলুন এবং নাম দিয়ে ফাইলটি খুঁজুন। যদি এটি পেয়ে যান, তবে কন্ট্রোল-ক্লিক করে Put Back বেছে নিন যাতে এটি মূল লোকেশনে ফিরে যায়, অথবা এটি টেনে নিরাপদ কোনো স্থানে নিয়ে যান। অ্যাপল স্পটলাইট দিয়ে সার্চ করারও পরামর্শ দেয় যদি ফাইলটি সরিয়ে নেওয়া বা নাম পরিবর্তন করা হয়ে থাকে। আইক্লাউড ড্রাইভে থাকা কোনো প্রোজেক্ট ফোল্ডারের ক্ষেত্রে ট্র্যাশের পাশাপাশি আইক্লাউডের Recently Deleted বা Data Recovery বিকল্পগুলোও পরীক্ষা করে দেখুন; অ্যাপল জানায় যে উপযুক্ত মুছে ফেলা আইক্লাউড ড্রাইভ ফাইলগুলো সাধারণত ৩০ দিনের মধ্যে পুনরুদ্ধার করা সম্ভব। অ্যাপলের আইক্লাউড রিকভারি সংক্রান্ত নির্দেশনা
যদি কোনো ডেভেলপার টুল ফাইলটি সরাসরি মুছে ফেলে থাকে, কিংবা ট্র্যাশ খালি করে দেওয়া হয়ে থাকে, তবে পরবর্তী পদক্ষেপে যান। ধরে নেবেন না যে মুছে ফেলা প্রতিটি জিনিসই ট্র্যাশে জমা হয়।
২. টাইম মেশিনে খুঁজুন, লোকাল স্ন্যাপশটসহ
যদি টাইম মেশিন চালু করা থাকে, তবে ব্যাকআপ ডিস্কটি যুক্ত করুন (যদি থাকে)। ফাইন্ডারে, যে ফোল্ডারে ফাইলটি ছিল সেটি খুলুন, স্পটলাইট ব্যবহার করে Time Machine খুলুন, তারপর টাইমলাইন বা ব্যাকআপের তীরচিহ্নগুলো দেখে ফাইল মুছে ফেলার আগের কোনো তারিখে যান। ফাইলটি নির্বাচন করে Restore-এ ক্লিক করুন। অ্যাপল জানায় যে পুনরুদ্ধার করা আইটেমগুলো তাদের মূল লোকেশনে ফিরে আসে, তাই কোনো কিছু প্রতিস্থাপন করার আগে সংস্করণগুলো তুলনা করে দেখতে চাইলে একটি আলাদা লোকেশনে রিস্টোর করার কথা বিবেচনা করুন। টাইম মেশিনের আইটেম পুনরুদ্ধার করার অ্যাপলের গাইড
ব্যাকআপ ডিস্ক সংযোগ বিচ্ছিন্ন থাকলেও পুনরুদ্ধারের সম্ভাবনা একেবারে নাকচ হয়ে যায় না। টাইম মেশিন ম্যাকের মধ্যে সংরক্ষিত লোকাল স্ন্যাপশট ব্যবহার করতে পারে, তবে এগুলো সাময়িক: অ্যাপল জানায় যে স্ন্যাপশটগুলো সাধারণত প্রতি ঘণ্টায় সেভ করা হয় এবং ২৪ ঘণ্টার জন্য রাখা হয়, আর বাড়তি স্ন্যাপশট ফাঁকা জায়গার ওপর নির্ভর করে। এগুলো কেবল তখনই থাকে যখন টাইম মেশিন ব্যবহার করা হয়, এবং এগুলো কোনো বাহ্যিক ব্যাকআপের বিকল্প নয়। টাইম মেশিনের লোকাল স্ন্যাপশট সম্পর্কে
৩. গিট থেকে ট্র্যাক করা ফাইল পুনরুদ্ধার করুন
টার্মিনাল খুলুন, প্রোজেক্ট ডিরেক্টরিতে যান এবং কোনো কিছু রিস্টোর করার আগে ফাইলের স্ট্যাটাস যাচাই করে নিন:
git status --short
যদি মুছে ফেলা ফাইলের পাথটি প্রদর্শিত হয় এবং ফাইলটি ট্র্যাক করা অবস্থায় ছিল, তবে প্রোজেক্ট-রিলেটিভ পাথ ব্যবহার করে ইনডেক্স থেকে এটি রিস্টোর করুন:
git restore -- path/to/file.ext
এটি ইনডেক্স করা সংস্করণটি ওয়ার্কিং ট্রিতে কপি করে আনে। যদি ইনডেক্সে ফাইলটি না থাকে, কিন্তু লেটেস্ট কমিটে থাকে, তবে তার বদলে HEAD থেকে রিস্টোর করুন:
git restore --source=HEAD -- path/to/file.ext
এই পার্থক্যটি গুরুত্বপূর্ণ: ওয়ার্কিং-ট্রি রিস্টোরের জন্য git restore ডিফল্টভাবে ইনডেক্স ব্যবহার করে; আর --source=HEAD নির্দিষ্টভাবে লেটেস্ট কমিট নির্বাচন করে। রিস্টোর করার ফলে নির্ধারিত ওয়ার্কিং-ট্রি পাথের ফাইলটি নির্বাচিত সংস্করণ দ্বারা ওভাররাইট হয়ে যায়, তাই সেখানে গুরুত্বপূর্ণ কোনো কনটেন্ট থাকলে প্রথমে তা অন্য কোথাও কপি করে রাখুন। গিট তাদের git restore ম্যানুয়াল-এ এই রিস্টোর সোর্স ও আচরণ সম্পর্কে বিস্তারিত উল্লেখ করেছে।
এই কমান্ডগুলো সম্পূর্ণ নতুন কোনো আনট্র্যাকড ফাইল কিংবা কখনো স্টেজ বা কমিট না করা এডিট পুনরুদ্ধার করতে পারে না। গিট কেবল সেই সংস্করণগুলো সম্পর্কে জানে যেগুলো এর ইনডেক্স, কমিট বা অবজেক্ট ডেটাবেজে স্থান পেয়েছিল।
৪. শেষ উপায় হিসেবে গিটের আনরিচেবল অবজেক্টগুলোতে খুঁজুন
কখনো কখনো কোনো শাখা বা কমিট নির্দেশ না করলেও গিট কোনো ফাইলের কনটেন্ট সংরক্ষণ করে রাখে—উদাহরণস্বরূপ, এমন একটি সংস্করণ যা স্টেজ করা হয়েছিল এবং পরবর্তীতে ইনডেক্স থেকে সরিয়ে নেওয়া হয়েছিল। প্রোজেক্ট ডিরেক্টরি থেকে আনরিচেবল অবজেক্টগুলো পরীক্ষা করুন:
git fsck --unreachable
গিট একটি আনরিচেবল blob এবং এর সাথে একটি অবজেক্ট আইডি প্রদর্শন করতে পারে। প্রোজেক্টে কোনো পরিবর্তন না করে এমন একটি সম্ভাব্য অবজেক্ট দেখতে ব্যবহার করুন:
git cat-file -p OBJECT_ID
OBJECT_ID-এর জায়গায় প্রদর্শিত আইডিটি বসান। আউটপুটটি যদি হারিয়ে যাওয়া ফাইলটি হয়, তবে এটিকে প্রোজেক্টের বাইরে একটি রিকভারি কপিতে রিডাইরেক্ট করুন, উদাহরণস্বরূপ:
git cat-file -p OBJECT_ID > "$HOME/Desktop/recovered-file.txt"
এখানে ফাইলের নাম ও এক্সটেনশনটি কেবল উদাহরণ হিসেবে দেওয়া হয়েছে; ফাইলের সাথে মানানসই একটি গন্তব্য এবং নাম বেছে নিন। গিটের ব্লব কেবল কনটেন্ট সংরক্ষণ করে, মূল পাথ নয়, তাই আপনাকে হয়তো সম্ভাব্য অবজেক্টগুলো দেখে নিজেই সঠিক নামটি শনাক্ত করতে হবে। git fsck আনরিচেবল অবজেক্টগুলোর রিপোর্ট দেয়, এবং এর --lost-found অপশনটি ব্লবের কনটেন্ট .git/lost-found/other/-এর নিচে লিখতে পারে; তবে কোনো পদ্ধতিই পুনরুদ্ধারযোগ্য সংস্করণের নিশ্চয়তা দেয় না। গিটের git fsck সংক্রান্ত ডকুমেন্টেশন
যখন কোনো রিকভারি সোর্সেই ফাইলটি পাওয়া যায় না
যদি ট্র্যাশ, ব্যাকআপ, ক্লাউড রিকভারি, গিটের ইনডেক্স, কমিট এবং গিটের আনরিচেবল অবজেক্টগুলোতেও এটি না থাকে, তবে হয়তো এই উল্লেখিত টুলগুলোর মাধ্যমে কোনো কপি পাওয়ার সুযোগ নেই। বিশেষ করে, যে আনট্র্যাকড ফাইলটি কখনো স্টেজ করা হয়নি, সেটি গিটের সংরক্ষিত ইতিহাসের অংশ নয়। আপনার এডিটরের নিজস্ব লোকাল হিস্ট্রি অথবা অন্য কোনো ব্যাকআপ সেবা ব্যবহার করে থাকলে সেটি পরীক্ষা করুন; এর প্রাপ্যতা এবং পুনরুদ্ধারের ধাপগুলো সংশ্লিষ্ট প্রোডাক্টের ওপর নির্ভর করে। অনুসন্ধান করার সময় প্রোজেক্টটি বর্তমান অবস্থাতেই অপরিবর্তিত রাখুন, এবং কোনো কনটেন্ট পুনরুদ্ধার হলে সেটি আপনার প্রয়োজনীয় সংস্করণ কিনা তা নিশ্চিত না হওয়া পর্যন্ত নতুন নামে সংরক্ষণ করুন।
তথ্যসূত্র
- If you’re missing files in iCloud Drive — অ্যাপল সাপোর্ট
- Restore items backed up with Time Machine on Mac — অ্যাপল সাপোর্ট
- About Time Machine local snapshots — অ্যাপল সাপোর্ট
- git restore — গিট
- git fsck — গিট