গিট রেপোতে মুছে ফোল্ডারটি পুনরুদ্ধার করুন


101

আমি একটি ফোল্ডারের ভিতরে সমস্ত সামগ্রী মুছে ফেলেছি এবং ফোল্ডারটি খালি রয়েছে। আমার এখনও আমার রিমোট রেপোতে একটি অনুলিপি ছিল। কিন্তু যখন আমি git pullএটি করেছি এটি মুছে ফেলা ফাইলগুলি পিছনে রাখেনি তা করার কথা নয়?

সুতরাং আমি কিছু গবেষণা করেছি এবং দেখেছি যে আপনি করে কোনও ফাইলকে রিভার্ট করতে পারেন git checkout <revision> -- <name of file>

তবে এটি কেবল ফাইলগুলিতে কাজ করে।

আমি কীভাবে ডিরেক্টরিতে থাকা সমস্ত ফাইল পুনরুদ্ধার করতে পারি?


4
git statusকী আদেশ (গুলি) চালাতে হবে সে সম্পর্কে আপনাকে একটি ইঙ্গিত দেবে
তাভিয়ান বার্নেস

4
মনে হচ্ছে আপনার এখনও আপনার দূরবর্তী রেপোতে পুরানো ডিরেক্টরি রয়েছে (এবং এটি আপনার স্থানীয় রেপোতেও থাকতে পারে)। শক্তিশালী পরামর্শ: ১) আপনার রিমোট রেপো থেকে একটি নতুন রেপোতে একটি "টানুন" (আপনার স্থানীয় রেপোর কোনও ক্ষতি করবেন না)। 2) আপনার নতুন, স্থানীয়, রেপোতে "চেকআউট" ... বা " রিভার্ট " চেষ্টা করুন: atlassian.com/git/tutorials/undoing-changes/git-revert । 3) রিমোট রেপো আপডেট করুন যখন আপনি নিশ্চিত হন যে সবকিছু ঠিক আছে।
পলস্ম 4

উত্তর:


255

আপনি কোনও ফাইল দিয়ে যা কিছু করতে পারেন, আপনি একটি ফোল্ডার দিয়েও করতে পারেন।

এছাড়াও দ্রষ্টব্য একটি গিট সংগ্রহস্থলে মুছে ফেলা ফাইলটি সন্ধান এবং পুনরুদ্ধার করুন


ফাইলগুলি ট্রি গাছ থেকে মুছে ফেলা হয়েছে তবে এখনও প্রতিশ্রুতিবদ্ধ নয়:

আপনি যদি এখনও git addনিজের পরিবর্তনগুলি সূচিকৃত না করেন (তবে ) আপনি কোনও ডিরেক্টরিতে সামগ্রীতে ফিরে যেতে পারেন:

git checkout -- path/to/folder

যদি মুছে ফেলা ইতিমধ্যে সূচিযুক্ত হয় তবে আপনার প্রথমে এটি পুনরায় সেট করা উচিত:

git reset -- path/to/folder
git checkout -- path/to/folder


সম্পূর্ণ কার্যকারী গাছটি পুনরুদ্ধার করুন (একক ফোল্ডার নয়) তবে সমস্ত অনিচ্ছাকৃত পরিবর্তন হারাবেন

git reset --hard HEAD


অতীতে ফাইলগুলি যখন কোনও প্রতিশ্রুতিতে মুছে ফেলা হয়:

প্রদত্ত পথে প্রভাবিত হওয়া সর্বশেষ প্রতিশ্রুতি সন্ধান করুন। যেহেতু ফাইলটি প্রধান প্রতিশ্রুতিতে নেই, এই প্রতিশ্রুতি অবশ্যই এটি মুছে ফেলবে।

git rev-list -n 1 HEAD -- <file_path>

তারপরে ক্যারেট ( ^) প্রতীক ব্যবহার করে কমিটের আগে সংস্করণটি চেকআউট করুন :

git checkout <deleting_commit>^ -- <file_path>


একটি দূর থেকে প্রতিশ্রুতিবদ্ধ থেকে সম্পূর্ণ কার্যকারী গাছ পুনরুদ্ধার করুন

git reset --hard <revision> 

4
git checkout -- path/to/folder/* কাজ করে না দ্রষ্টব্য: প্রশ্নটি কীভাবে কোনও ফোল্ডারটি ফাইল নয় পুনরুদ্ধার করবেন
gman

@gman এর How can I retrieve all the files inside the directoryঅর্থ ডিরেক্টরি এবং এর ফাইল উভয়ই। কিন্তু কমান্ড surprizingly আমার জন্য কাজ করে না। আমার মনে আছে এটি এক বছর আগে হয়েছিল।
নিক ভলিনকিন

4
@gman তবে এটি git checkout -- pathবা এর মতো কাজ করে git checkout -- 'path/*'। আপনার উদাহরণে আপনি মুছে ফেলুন git rmযা দিয়ে ওপি করায় মনে হয় না। আমি এই ধরনের ক্ষেত্রে জন্য নির্দেশাবলী যুক্ত করেছি। ধন্যবাদ!
নিক ভলিনকিন

4
উইন্ডোজ আপনার এই জাতীয় উক্তি রাখা প্রয়োজন:git checkout "<deleting_commit>^" -- <file_path>
মাওর

আমি রিসেট কমান্ডে একটি ফোল্ডার নির্দিষ্ট করে দিলেও এটি পুরো রেপোতে প্রচুর স্টাফ আনস্টেজ করেছে। এটি কীভাবে বোঝায়? আমি যখন চেকআউট চালাতাম তখন মনে হয় এটি আমার ফোল্ডারটি পুনরুদ্ধার করে। আমার কোডের বাকী অংশগুলিতে স্টেস্টেজ কী করেছে তা আমার কোনও ধারণা নেই, আহ সেন্ট্রালাইজড রেপোসের জন্য ব্যবহৃত হ'ল পিয়ার টু পিয়ারের রিপোজিটরি ম্যানেজারের আনন্দ।
পল কেনজোরা

5

আপনি যদি এখনও নিজের পরিবর্তনগুলি না করে থাকেন তবে আপনি সামগ্রী বা ডিরেক্টরিটি ফিরিয়ে দিতে পারেন:

git checkout -- removed_directory

আপনি যদি সমস্ত পরিবর্তনগুলি ফিরিয়ে দিতে চান তবে:

git reset --hard HEAD

4
git checkout -- removed_directory কাজ করে না
gman

git checkout -- removed_directoryআমার জন্য কাজ করেছে, তবে আমি আগে এই ডিরেক্টরিটি তৈরি করেছি ( checkoutসেই ডিরেক্টরিতে ফাইলগুলির মধ্যে একটি দ্বারা )। এই কমান্ড দ্বারা তৈরি হওয়ার পরে সমস্ত ফাইল ফোল্ডারে পুনরুদ্ধার করা হয়েছিল।
বুলিয়ান_ টাইপ

5

আপনি গিট রিস্টোর সহ ফাইল বা ফোল্ডার পুনরুদ্ধার করতে পারেন।

git restore --source master~1 "PATH_IN_YOUR_REPO"

এখানে, মাস্টার ~ 1 আপনার ফোল্ডারটিকে আপনার মাস্টার শাখা থেকে "1" পুনর্বিবেচনায় ফিরিয়েছে।

সূত্র: https://git-scm.com/docs/git-restore


4

আমার পক্ষে একমাত্র কাজটি ছিল অন্য ফোল্ডারে রেপো চেকআউট করা। ধরুন বর্তমান রেপো রয়েছে /home/me/current

আমি তখন করেছি

git clone /home/me/current /home/me/temp

এটি রেপো-এর একটি পৃথক ক্লোন তৈরি করে /home/me/temp

আমি এখন যেতে /home/me/tempচাই এবং যা করতে চাই তা করতে পারি। উদাহরণ স্বরূপ

git reset --hard commit-hash-before-delete

এখন আমি মুছে ফেলা ফাইল ফোল্ডারটি আবার কপি করতে পারি

cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder

এবং টেম্প ফোল্ডারটি মুছুন

rm -rf /home/me/temp

এর উদাহরণ

git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*

কাজ করোনা

$ git checkout -- some/deleted/folder/*
zsh: no matches found: some/deleted/folder/*
$ git checkout -- some/deleted/folder
error: pathspec 'some/deleted/folder' did not match any file(s) known to git.

যেমন অন্যান্য উদাহরণ

git reset --hard HEAD

কেবল মুছে ফেলা ফাইলের বাইরে ধ্বংসাত্মক। অন্য যে কোনও পরিবর্তনগুলিও হারিয়ে যাবে।

একইভাবে

git reset --hard some-commit

পরে কোনও কমিট হারাবে some-commit



0

আপনি যদি কোনও নির্দিষ্ট ফাইল নির্দিষ্ট না করেন তবে আপনার নির্দিষ্ট কমিটের সম্পূর্ণ বিষয়বস্তু টানতে সক্ষম হওয়া উচিত। লাইক: git checkout 264794319e9695ba843cd6(ধরে নিচ্ছি যে হ্যাশটিতে আপনার সমস্ত ফাইলের সঠিক অবস্থানে রয়েছে)।

pullফাইলগুলি পুনরুদ্ধার না করার কারণ হ'ল গিটটি আপনার মুছে ফেলাগুলি আরও সাম্প্রতিক পরিবর্তন হিসাবে দেখছে, আপনি যা যা টানছেন তার উপরে এটি প্রয়োগ করে।

(আমি একটি নতুন শাখায় পরীক্ষা করার পরামর্শ দেব।)


0

যদি আপনি কেবল একটি মুছে ফেলা ফোল্ডারটি পুনরুদ্ধার করতে সন্ধান করছেন এবং মুছে ফেলার পরে আপনার যদি অন্য কমিট করে থাকে তবে আপনি গিথুব ডটকম এ আপনার প্রকল্পটি স্রেফ যেতে পারেন।

Github.com থেকে, আপনার সর্বশেষ প্রতিশ্রুতিতে যান যা আপনার ফোল্ডারটি রয়েছে। আপনার প্রতিশ্রুতি বার্তাটি দেখতে হবে এবং ডানদিকে "ব্রাউজ ফাইলগুলি" লেবেলযুক্ত একটি বোতাম রয়েছে। এটি ক্লিক করা আপনাকে কমিটের সেই পর্যায়ে থেকে সমস্ত ফাইলে নিয়ে যাবে।

সেখান থেকে আপনি কোডটি ক্লোন করতে পারেন বা একটি জিপ হিসাবে কোডটি ডাউনলোড করতে পারেন।


-1

নিঃশর্ত মুছে ফেলার জন্য, এটি এর মতোই সহজ:

গিট রিসেট হেড রিল / পাথ / টু / ডিলিট / ডিরেক্টরি / *

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