একসময় আমার প্রকল্পে একটি ফাইল ছিল যা আমি এখন পেতে সক্ষম হতে চাই।
সমস্যাটি হ'ল: আমি কখন এটি মুছলাম এবং কোন পথে ছিল তা সম্পর্কে আমার কোনও ধারণা নেই।
এই ফাইলটি বিদ্যমান থাকলে আমি কীভাবে তা জানতে পারি?
একসময় আমার প্রকল্পে একটি ফাইল ছিল যা আমি এখন পেতে সক্ষম হতে চাই।
সমস্যাটি হ'ল: আমি কখন এটি মুছলাম এবং কোন পথে ছিল তা সম্পর্কে আমার কোনও ধারণা নেই।
এই ফাইলটি বিদ্যমান থাকলে আমি কীভাবে তা জানতে পারি?
উত্তর:
আপনি যদি সঠিক পথটি ব্যবহার করতে পারেন তা না জানেন
git log --all --full-history -- "**/thefile.*"
ফাইলটি যে পথে ছিল তা আপনি যদি জানেন তবে আপনি এটি করতে পারেন:
git log --all --full-history -- <path-to-file>
এটি সেই সমস্ত শাখায় কমিটের একটি তালিকা প্রদর্শন করবে যা সেই ফাইলটিকে স্পর্শ করেছে। তারপরে, আপনি যে ফাইলটি চান তার সংস্করণটি খুঁজে পেতে এবং এর সাথে এটি প্রদর্শন করতে পারেন ...
git show <SHA> -- <path-to-file>
বা এটির সাথে আপনার ওয়ার্কিং কপির সাথে এটি পুনরুদ্ধার করুন:
git checkout <SHA>^ -- <path-to-file>
ক্যারেট সিম্বল ( ^) নোট করুন , যা চিহ্নিত শুরুর পূর্বে চেকআউট পায় , কারণ <SHA>প্রতিশ্রুতি দেওয়ার মুহুর্তে ফাইলটি মুছে ফেলা হয়েছে, মুছে ফেলা ফাইলের বিষয়বস্তুগুলি পেতে আমাদের পূর্ববর্তী প্রতিশ্রুতি দেখতে হবে
git log -- <path>আপনি যখন কোনও শাখায় থাকবেন না যেখানে পেডমোর্টেরোলোর কোনও আউটপুট থাকবে না যেখানে ফাইলটি কখনও অস্তিত্বহীন ছিল। আপনার git log --all -- <path>অন্যান্য শাখায় ঘটে যাওয়া পরিবর্তনগুলি মিস করবেন না তা নিশ্চিত করার জন্য আপনার সর্বদা ব্যবহার করা উচিত । কমান্ডটি git log -- <path>খুব বিপজ্জনক হতে পারে যদি আপনার একাধিক শাখা থাকে এবং পাথ এবং শাখাগুলি ভুলে যাওয়ার প্রবণতা হয় (আমার মতো) এবং আপনি অন্যান্য বিকাশকারীদের সাথে কাজ করেন তবে এটি বিপজ্জনকও হতে পারে।
git checkout <SHA>^ -- <path-to-file>(^ প্রতীকটি দ্রষ্টব্য), কারণ <Sha> প্রতিশ্রুতি দেওয়ার মুহুর্তে ফাইলটি মুছে ফেলা হচ্ছে, মুছে ফেলা ফাইলের বিষয়বস্তুগুলি পাওয়ার জন্য আমাদের পূর্ববর্তী প্রতিশ্রুতিটি দেখতে হবে
মুছে ফেলা ফাইলগুলির একটি তালিকা পান এবং মোছা ফাইলটির পুরো পথটি অনুলিপি করুন
git log --diff-filter=D --summary | grep delete
সেই কমিটের প্রতিশ্রুতিবদ্ধ আইডি সন্ধানের জন্য পরবর্তী আদেশটি কার্যকর করুন এবং প্রতিশ্রুতি আইডিটি অনুলিপি করুন
git log --all -- FILEPATH
মুছে ফেলা ফাইলের আলাদা দেখান
git show COMMIT_ID -- FILE_PATH
মনে রাখবেন, আপনি >লাইক ব্যবহার করে কোনও ফাইলে আউটপুট লিখতে পারেন
git show COMMIT_ID -- FILE_PATH > deleted.diff
unknown revision or path not in the working tree।
git log --diff-filter=D --summary | grep -E 'delete|^commit\s+\S+'
git-grep-latest(){ result_path=$(git log --diff-filter=D --summary | grep $1 | head -1 | awk '{print $4;}'); latest_commit=$(git log --all -- $result_path | head -1 | awk '{print $2;}'); git show $latest_commit -- $result_path; }এবং এখন আপনি কেবল এটি করতে পারেন:git-grep-latest some_text
linux pipesপছন্দ করবেন।
গৃহীত প্রতিক্রিয়াটি এটিকে এখানে উত্তর হিসাবে যুক্ত করে সম্পাদনা করতে পারেনি,
গিটে ফাইলটি পুনরুদ্ধার করতে, নিম্নলিখিতটি ব্যবহার করুন (এসএইচএর ঠিক পরে 'sign' চিহ্নটি নোট করুন)
git checkout <SHA>^ -- /path/to/file
<SHA>~1এটিকে উদ্ধৃতি চিহ্নের সাথে মোড়ানো ছাড়া একই কাজ করা উচিত।
ধরা যাক আপনি ডেকে আনা একটি ফাইল পুনরুদ্ধার করতে চান MyFileতবে তার পথ সম্পর্কে (বা তার প্রসারিত বিষয়টি সম্পর্কে) অনিশ্চিত:
প্রিলিম: গিট রুটে পা রেখে বিভ্রান্তি এড়ান
একটি অনিয়ন্ত্রিত প্রকল্পে অনুরূপ বা অভিন্ন নাম সহ একাধিক ডিরেক্টরি থাকতে পারে।
> cd <project-root>
পুরো পথটি সন্ধান করুন
গিট লগ - ডিফ-ফিল্টার = ডি - সুসমারি | grep মুছে ফেলুন | গ্রেপ মাইফাইল
delete mode 100644 full/path/to/MyFile.js
full/path/to/MyFile.js আপনি যে পথ এবং ফাইলটি সন্ধান করছেন তা।
সেই ফাইলটি প্রভাবিত করে এমন সমস্ত কমিট নির্ধারণ করুন
গিট লগ --অনলাইন - ফলো - সম্পূর্ণ / পাথ / থেকে / মাইফিল.জেএস
bd8374c Some helpful commit message
ba8d20e Another prior commit message affecting that file
cfea812 The first message for a commit in which that file appeared.
ফাইলটি চেকআউট করুন
যদি আপনি প্রথম তালিকাভুক্ত প্রতিশ্রুতি (সর্বশেষ কালানুক্রমিকভাবে, এখানে বিডি 8374c) চয়ন করেন তবে ফাইলটি পাওয়া যাবে না, কারণ এটি সেই প্রতিশ্রুতিতে মোছা হয়েছিল।
> git checkout bd8374c -- full/path/to/MyFile.js
`error: pathspec 'full/path/to/MyFile.js' did not match any file(s) known to git.`
কেবল পূর্ববর্তী (একটি ক্যারেট সংযোজন) প্রতিশ্রুতি নির্বাচন করুন:
> git checkout bd8374c^ -- full/path/to/MyFile.js
git log --diff-filter=D --summary | find "delete" | find "MyFile"git checkout "bd8374c^" -- full/path/to/MyFile.js
@ আম্বর সঠিক উত্তর দিয়েছেন! আরও একটি সংযোজন, যদি আপনি ফাইলটির সঠিক পথটি না জানেন তবে আপনি ওয়াইল্ডকার্ড ব্যবহার করতে পারেন! এটি আমার পক্ষে কাজ করেছে।
git log --all -- **/thefile.*
নীচে একটি সাধারণ কমান্ড দেওয়া হয়েছে, যেখানে কোনও দেব বা গিট ব্যবহারকারী একটি সংগ্রহযোগ্য ফাইলের নাম সংগ্রহস্থল রুট ডিরেক্টরি থেকে পাস করে ইতিহাসটি পেতে পারেন:
git log --diff-filter=D --summary | grep filename | awk '{print $4; exit}' | xargs git log --all --
যদি কেউ, কমান্ড উন্নত করতে পারেন, দয়া করে।
দর্শকদের মধ্যে একটি ব্যবহার করার চেষ্টা করুন, যেমন gitkআপনি সেই অর্ধেক মনে রাখা ফাইলটি খুঁজে পেতে ইতিহাসের চারপাশে ব্রাউজ করতে পারেন। ( gitk --allসমস্ত শাখার জন্য প্রয়োজন হলে ব্যবহার করুন )
--allবিকল্প উভয় আপনার উত্তর এবং গ্রহণযোগ্য উত্তরের জন্য গুরুত্বপূর্ণ।
সারসংক্ষেপ:
আপনি মুছে ফেলা ফাইলগুলির ইতিহাসে আপনার ফাইলের পুরো পথটি অনুসন্ধান করেন git log --diff-filter=D --summary | grep filename
আপনার ফাইলটি মোছার আগে কমিট থেকে পুনরুদ্ধার করুন
restore () {
filepath="$@"
last_commit=$(git log --all --full-history -- $filepath | grep commit | head -1 | awk '{print $2; exit}')
echo "Restoring file from commit before $last_commit"
git checkout $last_commit^ -- $filepath
}
restore my/file_path
এখানে আমার সমাধান:
git log --all --full-history --oneline -- <RELATIVE_FILE_PATH>
git checkout <COMMIT_SHA>^ -- <RELATIVE_FILE_PATH>