কীভাবে একটি "গিট আরএমআর।" ফিরিয়ে আনবেন?


378

আমি দৃid়তার সাথে বললাম git rm -r .। আমি কীভাবে এ থেকে পুনরুদ্ধার করব?

আমি প্রতিশ্রুতিবদ্ধ না।

আমার মনে হয় সমস্ত ফাইল মুছে ফেলার জন্য চিহ্নিত করা হয়েছিল এবং আমার স্থানীয় চেকআউট থেকে শারীরিকভাবে সরিয়েও দেওয়া হয়েছিল।

সম্পাদনা: আমি (যদি আমি আদেশটি জানতাম) শেষ প্রতিশ্রুতিতে ফিরে যেতে পারি। তবে আমি আরও যদি পূর্বাবস্থায় ফিরে আসতে পারতাম তবে এটি অনেক ভাল git rm -r .। কারণ আমি সর্বশেষ প্রতিশ্রুতি দেওয়ার পরে এবং এর আগে আমি কী করেছি তা আমি সত্যই নিশ্চিত নই git rm -r .


3
এই নির্দিষ্ট প্রশ্নের জন্য, রিসেট --হার্ড একটি ভাল সমাধান ... এটি ইতিমধ্যে তালিকাভুক্ত তাই আমি এই মন্তব্যে কেবল উল্লেখ করব যে আপনি গিট-রিফ্লগের জন্য ডকুমেন্টেশন চেক করতে চাইতে পারেন।
উইলিয়াম পার্সেল

8
লক্ষ্য করুন কারণ আপনার সরবরাহ করা হয়নি -fকরতে git rmGit কোন ফাইল মঞ্চস্থ করেছিলেন বা unstaged পরিবর্তন তাই একটি সরিয়েছি করা হবে না git reset; git checkout .সবকিছু পুনরুদ্ধার করা উচিত।
সিবি বেইলি

শুধু নজর দিন - গিট চেকআউট। সমস্ত অনাস্থাবিহীন পরিবর্তন মুছে ফেলবে।
পিটারবি

1
আমি ঠিক
এটির

গীত 2.23+ (আগস্ট 2019) এর মাধ্যমে, আপনি ফাইল প্রত্যর্পণ করা হবে git restore: git restore -s@ -SW -- .। দেখুন নিচের আমার উত্তর
ভোনসি

উত্তর:


468
git reset HEAD

এটা করা উচিত। আপনার যদি যত্ন নেওয়া কোনও আপত্তিজনক পরিবর্তন না হয় তবে

git reset --hard HEAD

জোর করে আপনার শেষ প্রতিশ্রুতিতে সবকিছু পুনরায় সেট করা উচিত। আপনার যদি বিনা অনুমতিতে পরিবর্তনগুলি হয় তবে প্রথম কমান্ডটি কাজ করে না, তবে আপনার অনির্ধারিত পরিবর্তনগুলি এতে সংরক্ষণ করুন git stash:

git stash
git reset --hard HEAD
git stash pop

22
নোট করুন যে git reset --hard HEADআপনি বর্তমান কার্যকারী ডিরেক্টরিটির মূল ডিরেক্টরিতে যে কোনও দরকারী পরিবর্তন করেছেন।
অ্যালেক্স ব্রাউন

10
@ মাইল্ড: আমি এখনও ঠান্ডা ঘাম পরেছি!
hoipolloi

6
আমি ভোট কমে নি, তবে আমি কেবল স্ট্যাশ চেষ্টা করেছি, শক্ত পুনরায় সেট করেছি, পপ করেছি এবং আমার সাম্প্রতিক পরিবর্তনগুলি হারিয়েছি। আমি উত্তর ভুল লিখতে পারে।
গ্রেগ এম। কৃষাক

1
এটি খুব কমই আমার পক্ষে কাজ করে এবং আমি ড্রপবক্স ফোল্ডারে কাজ করে খুব আনন্দিত। খারাপ ফর্ম, তবে প্রতিবারই আমাকে বাঁচায় ...
নবী

3
যখন আমি গিট স্ট্যাশ পপ করতাম, তখন এটি কেবল ফাইলগুলি আবার সরিয়ে দেয়, অবশ্যই কারণ এটি সত্য যে আমি (দুর্ঘটনাক্রমে) কিছু ফাইল সরিয়ে দিয়েছি st আপনি রাখতে চান এমন আপত্তিজনক পরিবর্তন থাকলে এই উত্তরটি কার্যকর হয় না।
sudo

252

আমি কয়েকটি ফাইল গিটার-আরএম করেছি এবং আমার পরবর্তী প্রতিশ্রুতি দেওয়ার আগে পরিবর্তনগুলি চালিয়ে গিয়েছিলাম যখন বুঝতে পেরেছিলাম those ফাইলগুলির কিছু আমার ফিরে দরকার। স্ট্যাশ এবং পুনরায় সেট করার পরিবর্তে, আপনি যদি চান তবে আপনি যে পৃথক ফাইলগুলি মিস করেছেন / মুছেছেন তা কেবলমাত্র চেকআউট করতে পারেন:

git checkout HEAD path/to/file path/to/another_file

এতে আপনার অন্যান্য অনিয়ন্ত্রিত পরিবর্তনগুলি কোনও কর্মক্ষেত্রে অক্ষত থাকবে।


6
এটি সাহায্য করেছিল কারণ আমার অন্যান্য অনিয়ন্ত্রিত পরিবর্তন ছিল।
ড্যান

4
এই উত্তরটি আমাদের মধ্যে যারা এই প্রশ্নটিকে হোঁচট খেয়েছিল তাদের জন্য git rmপুরো পুনরাবৃত্তির পরিবর্তে একক একটিকে পুনরায় দেখাতে সহায়তা করে git rm -r। সম্পূর্ণ পুনরাবৃত্তির মোছার জন্য, অপসারণ করা ফাইলগুলির পরিমাণের উপর নির্ভর করে অন্যান্য সমাধানগুলি আরও ভাল হতে পারে।
tresf

আপনি, আমার মানুষ, একটি পুরষ্কার প্রাপ্য।
সালামিত

আমি যদি এটি করতে পারি তবে আমি এটি 100. বার উপরে ক্লিক করতে পারি !!!
ওয়াগনার ব্রাগা

57

কিছু একক ফাইল বা ফোল্ডার পুনরুদ্ধারে নিম্নলিখিতগুলি ব্যবহার করতে পারে

git reset -- path/to/file
git checkout -- path/to/file

এটি প্রথমে সূচক এন্ট্রিগুলি path/to/fileপুনরায় তৈরি করবে এবং ফাইলটি শেষ প্রতিশ্রুতি অনুসারে পুনরায় তৈরি করবে, যেমন HEAD

ইঙ্গিত: একটি পুরানো কমিট থেকে ফাইল পুনরায় তৈরি করতে উভয় আদেশে একটি কমিট হ্যাশ পাস হতে পারে। দেখুন git reset --helpএবং git checkout --helpবিশদ জন্য।


সেরা উত্তর. git rmঅন্যান্য আপত্তিহীন পরিবর্তনগুলি মুছে না ফেলে একক অপারেশনের সহজ অস্ত্রোপচার 'পূর্বাবস্থায়' ।
ওয়াবেরি

আমাকে সাহায্য করেছেন! সেরা উত্তর.
আকরাম

28

হালনাগাদ:

যেহেতু git rm .ওয়ার্কিং চেকআউটের পাশাপাশি সূচীতে এই এবং শিশু ডিরেক্টরিতে সমস্ত ফাইল মুছে ফেলা হয়, তাই আপনাকে এই পরিবর্তনগুলির প্রতিটি পূর্বাবস্থায় ফেলা দরকার:

git reset HEAD . # This undoes the index changes
git checkout .   # This checks out files in this and child directories from the HEAD

এটি আপনার যা করা উচিত তা করা উচিত। এটি আপনার চেক-আউট কোড বা সূচকের পিতামাতার ফোল্ডারগুলিকে প্রভাবিত করে না।


পুরানো উত্তর যা ছিল না:

reset HEAD

কৌতুকটি করবে এবং আপনি আপনার ফাইলগুলিতে যে কোনও আপত্তিহীন পরিবর্তন মুছে ফেলবেন না

এর পরে আপনার যে git addকমান্ডগুলি সারি রেখেছে তার পুনরাবৃত্তি করতে হবে।


1
দুঃখিত, আমি সবসময় সেটআপ করি git alias.co="checkout"যাতে git coচেকআউট হয়।
অ্যালেক্স ব্রাউন

25

যদি আপনি উপরের কোনও কাজ শেষ না করেন তবে আপনি এখান থেকে পরামর্শটি ব্যবহার করে ডেটা পুনরুদ্ধার করতে সক্ষম হতে পারেন: http://www.spinics.net/lists/git/msg62499.html

git prune -n
git cat-file -p <blob #>

4 বছর পরে, এখনও একটি জীবনদাতা!
থিভিংসিক্স

ফলাফলগুলিকে বোঝাতে আমি একটি সি ++ প্রোগ্রাম লিখেছিলাম (আমার রেপোতে প্রায় 100 টি বস্তু ঝুঁকছে, এটি প্রয়োজনীয় করে)। কেবল সংকলন করুন এবং চালান, তারপরে আপনার গিট রেপো স্থানীয় ডিরেক্টরিতে পাস করুন। Raw.githubusercontent.com/bluman/git-recover-files/master/…
জেমস Meas

14

পূর্ববর্তী গিট আরএম

git rm file             # delete file & update index
git checkout HEAD file  # restore file & index from HEAD

পূর্ববর্তী গীত আরএম-আর

git rm -r dir          # delete tracked files in dir & update index
git checkout HEAD dir  # restore file & index from HEAD

আর্ট গিট আরএম-আরএফ

git rm -r dir          # delete tracked files & delete uncommitted changes
not possible           # `uncommitted changes` can not be restored.

Uncommitted changesঅন্তর্ভুক্ত not staged changes, staged changes but not committed


অবশ্যই কোনও কিছুই পূর্বাবস্থায় ফেরাতে git rm -rfপারে না , কারণ এটি অচিহ্নযুক্ত বা স্টেজযুক্ত (কেবল) ফাইলগুলিও মুছতে পারে।
jpaugh

git rm -rf fileএবং git rm -rf dirকোনও অপ্রকাশিত ফাইল মুছবে না।
গান xu

10

আপনি যদি প্রতিশ্রুতিবদ্ধ হন এবং পরিবর্তনগুলিকে ধাক্কা দিয়ে থাকেন তবে ফাইলটি ফিরে পেতে আপনি এটি করতে পারেন

// Replace 2 with the # of commits back before the file was deleted.
git checkout HEAD~2 path/to/file

এটি 'প্রতিশ্রুতিবদ্ধ হতে পরিবর্তনগুলি:' এর জন্য কাজ করেছে যেখানে আমার এখনও একটি প্রবীণ গিট চেরি-পিক থেকে একটি ফাইল মুছে ফেলা হয়েছে I আমি গিট রিসেটের চেষ্টা করেছি AD <সংখ্যা> <ফাইল> যা কাজ করেনি।
মাশক্রাফট

7

ইতিমধ্যে কিছু ভাল উত্তর রয়েছে, তবে আমি একটি সামান্য-ব্যবহৃত সিনট্যাক্সের পরামর্শ দিতে পারি যা কেবল দুর্দান্ত কাজ করে না, তবে আপনি যা চান তাতে খুব স্পষ্ট হয় (তত ভীতিজনক বা রহস্যজনক নয়)

git checkout <branch>@{"20 minutes ago"} <filename>

3

তালিকা প্রতিশ্রুতি পান

git log  --oneline

উদাহরণস্বরূপ, স্থিতিশীল কমিটের হ্যাশ: 45ff319c360cd7bd5442c0fbbe14202d20ccdf81

git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master

1

আমার অভিন্ন পরিস্থিতি ছিল। আমার ক্ষেত্রে সমাধানটি ছিল:

git checkout -- .


-1

আমার ঠিক একই সমস্যা ছিল: আমার ফোল্ডারগুলি পরিষ্কার করা, ফাইলগুলি পুনরায় সাজানো এবং সরিয়ে নেওয়া। আমি প্রবেশ করলাম: গিট আরএম এবং এন্টার চাপুন; এবং তারপরে আমার অন্ত্রগুলি কিছুটা আলগা হয়ে গেছে। ভাগ্যক্রমে, আমি সরাসরি গিট কমিট-এম টাইপ করিনি।

তবে, নিম্নলিখিত কমান্ড

git checkout .

সবকিছু পুনরুদ্ধার, এবং আমার জীবন রক্ষা।

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