গিট সংগ্রহস্থলের ইতিহাস থেকে কীভাবে একটি সম্পূর্ণ ডিরেক্টরি পুনরুদ্ধার করবেন?


91

আমি আমার গিট সংগ্রহস্থলের ইতিহাস থেকে একটি সম্পূর্ণ ডিরেক্টরি পুনরুদ্ধার করতে চাই (পুনরাবৃত্তভাবে)।

এখানে কেবল 1 টি শাখা (মাস্টার) রয়েছে।

আমি প্রতিশ্রুতি জানি যেখানে ত্রুটি অন্তর্ভুক্ত ছিল।

ডিরেক্টরিগুলির অবস্থা পুনরুদ্ধার করার জন্য আমি কি পিতামাতার প্রতিশ্রুতির sha1 হ্যাশ ব্যবহার করতে পারি যেমন ত্রুটিগুলি অন্তর্ভুক্ত করার আগে ছিল?

আমি এরকম কিছু সম্পর্কে ভেবেছিলাম:

git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/

তবে এটি কার্যকর হয়নি।


7
সংশোধন এবং পাথের মধ্যে '-' যুক্ত করার চেষ্টা করুন:git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
কার্লোস ক্যাম্পাদ্রেস

এই সাহায্য করেছে। আপনাকে অনেক ধন্যবাদ.
mostwanted

4
@ কার্লোস ক্যাম্প্ডার্স এর সত্য উত্তর হিসাবে লিখুন এবং অন্য কেউ এটি করার আগে আপনার 15 পয়েন্ট সংগ্রহ করুন;)
র‌্যালফিথিনেঞ্জ

@ ম্যাগনাসস্কোগ আমি নিশ্চিত ছিল না যে এটি কাজ করবে, তাই আমি যাচাই করতে একটি মন্তব্য করেছি। এখন আমি নিশ্চিত যে এটি কাজ করে, আমি এটি উত্তর হিসাবে লিখে
রেখেছি

4
একটি সাধারণ ইঙ্গিত হিসাবে, "এটি কাজ করে না" খুব কার্যকর নয়। এটি কেন কার্যকর হয়নি তা আমাদের বলুন , আদর্শভাবে ত্রুটির আউটপুট (এটি খুব দীর্ঘ হলে ছাঁটা) সহ with
me_ এবং 12'12

উত্তর:


156

সংশোধন এবং পাথের মধ্যে '-' যুক্ত করার চেষ্টা করুন:

git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/ 

এবং আপনি যদি পূর্বের প্রতিশ্রুতি থেকে কোনও ডিরেক্টরি পুনরুদ্ধার করতে চান তবে আপনি কমিট হ্যাশটি HEAD ~ 1 দ্বারা প্রতিস্থাপন করতে পারেন, উদাহরণস্বরূপ:

git checkout HEAD~1 -- path/to/the/folder/ 

একই কমান্ড, প্রায় বিভিন্ন উদ্দেশ্য: stackoverflow.com/questions/953481/...
cregox

18
যদিও একটি সমস্যা রয়েছে: ডিরেক্টরিটি এখনও বিদ্যমান থাকলেও ওপি নির্দিষ্ট করে না। বিদ্যমান ডিরেক্টরিটি একটি প্রতিশ্রুতিবদ্ধ অবস্থায় পুনরুদ্ধার করতে, ডিরেক্টরিটির সামগ্রীটি প্রথমে মুছে ফেলা উচিত। অন্য ক্ষেত্রে, পুরানো প্রতিশ্রুতিতে বিদ্যমান ফাইলগুলি সরানো হবে না।
আলবার্তো

7
+1 @ অ্যালবার্তো নিশ্চিতভাবে সম্মত হন। আমি rm -Rf path/to/the/folderতখনই করেছি git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/- ফলাফল: সেই পথে সেই প্রতিশ্রুতি মতো ঠিক একই ফাইল ছিল, এই অঙ্গীকারের পরে কোনও তফাত এবং কোনও অতিরিক্ত ফাইল তৈরি হয়নি। যা আমি চাই।
থেরোবাইওয়ান

4
কি করে --?
রে ফস 19

4
@ রায়ফসস এটি গিটকে বলে যে নীচের প্যারামিটারগুলি ফাইল (অন্যথায় তারা কমিট হ্যাশ, শাখা বা অন্য কোনও কিছুর সাথে বিভ্রান্ত হতে পারে)। সাধারণত তাদের প্রয়োজন হয় না তবে এগুলি স্থাপন করা কোনও ক্ষতি করে না
কার্লোস ক্যাম্পাদ্রেস

3

এটি করার দুটি সহজ উপায় রয়েছে:

যদি ত্রুটিগুলি অন্তর্ভুক্ত করে এমন প্রতিশ্রুতিতে কেবল ত্রুটি অন্তর্ভুক্ত থাকে তবে git revertএর প্রভাবগুলি উল্টাতে ব্যবহার করুন ।

যদি তা না হয় তবে সহজ পথটি হ'ল:

  1. git checkout 348…
  2. cp -a path/to/the/folder ../tmp-restore-folder
  3. git checkout HEAD # or whatever
  4. rm -rf path/to/the/folder
  5. mv ../tmp-restore-folder path/to/the/folder
  6. git add path/to/the/folder
  7. git commit -m "revert …"

1

আপনি যদি সহজভাবে করেন git checkout <SHA-ID>তবে এটি অস্থায়ীভাবে আপনাকে সেই শ-কমিটে নিয়ে যাবে।

প্রতিটি প্রতিশ্রুতিবদ্ধ অবজেক্ট সেই সময়ে ডিস্কের পুরো কাঠামো ধারণ করে, সুতরাং আপনার যদি সেখানে ফাইল থাকে এবং সেগুলি অনুলিপি করার প্রয়োজন হয়, আপনি এটি করতে পারেন। সতর্কতা যদিও, আপনি কোনও শাখায় থাকবেন না, সুতরাং আপনার কার্যক্ষম গাছের মধ্যে ফাইলটি অনুলিপি করার আগে আপনাকে মাস্টারে ফিরে যেতে হবে এবং এটি প্রতিশ্রুতিবদ্ধ করতে হবে।


আবার "মাস্টারে ফিরে যান" মানে আপনার চেকআউট মাস্টার?
পেসারিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.