গিট পুনরুদ্ধার করা ফাইল পুনরুদ্ধার যেখানে মুছে ফেলার পরে কোন অঙ্গীকার করা হয়নি


812

আমি কিছু ফাইল মুছে ফেলেছি।

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

আমি ফাইলগুলি পুনরুদ্ধার করতে আমার কর্মক্ষেত্রটি পুনরায় সেট করতে চাই।

আমি ক git checkout .

তবে মুছে ফেলা ফাইলগুলি এখনও নিখোঁজ রয়েছে।

এবং git statusদেখায়:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    cc.properties
#   deleted:    store/README
#   deleted:    store/cc.properties
#

git checkout .কর্মক্ষেত্রটি কেন পুনরায় সেট করবেন না HEAD?


16
আপনি যদি মুছে ফেলার পরে আপনার পরিবর্তনগুলি মঞ্চস্থ না করে থাকেন git checkout .তবে ভাল কাজ করতেন have
ফিজাল

10
@ ফাইজাল এবং আপনি যদি তা করেন তবে আপনি আপনার পরিবর্তনগুলি হারাবেন।
ভ্যাসিলি ইয়র্কিন

1
মুছে ফেলা আইটেমটিতে গিট গুইতে কেবল Ctrl-J টিপুন।
আজ

গিট চেকআউট - cc.properties store / README store / cc.properties
বিনোদ পাসি

এই উত্তরটি দেখুন: quora.com/…
লাইভ-লাভ

উত্তর:


787

আউটপুট আপনাকে কী করতে হবে তা আপনাকে জানায়। git reset HEAD cc.propertiesপ্রভৃতি

এটি আরএম অপারেশনটিকে স্টেস্টেজ করে দেবে। এরপরে, git statusআবার চালানো আপনাকে বলবে যে git checkout -- cc.propertiesফাইলটি ফিরে পেতে আপনার কিছু করা দরকার ।

আপডেট: আমার কনফিগার ফাইলে এটি রয়েছে

$ git config alias.unstage
reset HEAD

যা আমি সাধারণত স্টাফ আনস্টেজ করতে ব্যবহার করি।


5
আপনি একাধিক মুছে ফেলা ফাইলগুলির জন্য এটি কীভাবে করেন? চলমান গিট রিসেট হেড <<ফাইল নাম>> একাধিক বার জটিল হবে, এটি করার কোনও কার্যকর উপায়?
সাবসুল

70
git reset HEAD \*এবং তারপরেgit checkout -- .
নওফাল ইব্রাহিম 10'16

3
তবে আমি ফাইলগুলি পরিবর্তন করেছি।
জিয়াং ওয়াইডি

@ রৌলিরাজান্দে সম্ভবত আপনার প্রশ্নটি মূল প্রশ্নে বর্ণিত পরিস্থিতি থেকে আলাদা prob
নওফাল ইব্রাহিম

1
rm -r ./engines- উফ! এখন git reset engines; git checkout engines
ক্রিস

209

আপনি মুছে ফেলার পর্যায়ে এসেছেন যাতে আপনার প্রয়োজন:

git checkout HEAD cc.properties store/README store/cc.properties

git checkout . মুছে ফেলা ইতিমধ্যে মঞ্চস্থ হয়েছে যেখানে কেবল সূচক থেকে পরীক্ষা করে।


177

শুধু কর git checkout path/to/file-I-want-to-bring-back.txt


8
ফাইলগুলি প্রতিশ্রুতিবদ্ধ এবং ধাক্কা না দিয়ে কেবল কাজ করে works
maen3d

23
আমার পক্ষে কাজ করেনি, গিট বলেছে যে এটি সেই নামে কোনও ফাইল জানে না, যদিও ফাইলটি ট্র্যাক করা হয়েছে। আমিও প্রতিশ্রুতিবদ্ধ হইনি, আমি নেটবিনের প্রসঙ্গ মেনুটি ভুল করে কেবল মুছে ফেলেছি।
জেলফির কালটস্টল

4
@ জেলফির +1error: pathspec 'file.ext' did not match any file(s) known to git.
ইভান বোর্শচভ

@ ব্যবহারকারী 3479125 আমি অনুমান করি যে আপনার ফাইলটি কখনই কমেনি। git statusএটি সম্পর্কে কি বলে?
ki92

12
গিটের স্থিতিটি সবুজ "ডিলেটড ফাইল.সেক্সট" git checkout HEAD -- file.extএটিকে পুনরুদ্ধার করতে সহায়তা করেছিল।
ইভান বোর্শচভ

143

প্রতিটি একক পথ নির্দিষ্ট না করে স্বয়ংক্রিয়ভাবে একবারে সমস্ত স্টেজেস্টেড মোছা পুনরুদ্ধার করতে :

git ls-files -z -d | xargs -0 git checkout --

সব পুনরুদ্ধার করার জন্য মঞ্চস্থ একবারে মুছে, স্বয়ংক্রিয়ভাবে, প্রতিটি একক পাথ উল্লেখ না করে:

git status | grep 'deleted:' | awk '{print $2}' | xargs git checkout --

12
আমি দুর্ঘটনাক্রমে 500 টিরও বেশি ফাইল মুছে ফেলেছি এবং এটি একটি ট্রিট কাজ করেছে কারণ এটি আমার সমস্ত বৈধ পরিবর্তনগুলিও রেখেছিল (প্রথম লাইনটি আমি ব্যবহার করেছি)। ধন্যবাদ।
গাই লো 5

1
দুর্ঘটনাক্রমে একটি সফল নির্মাণের ঠিক পরে কোনও রেপোর সমস্ত সামগ্রী মুছে ফেলা হয়েছে। প্রথম কমান্ড আমার বেকন সংরক্ষণ করেছে।
মোনালিসা ওভারড্রাইভ

2
এটি আমার পক্ষে কাজ করার আগে আমাকে দৌড়াতে হয়েছিল git status --long | grep 'deleted:' | awk '{print $2}' | xargs git reset HEAD --
আয়ান ডান

1
খুব দরকারী, অনার্যাক করা ফাইলগুলি রাখতে চেয়েছিলেন তবে মুছে ফেলা এবং পরিবর্তিত থেকে মুক্তি পেতে পারেন, পরিবর্তিত পরিচালনা করার জন্য সবেমাত্র -d থেকে -m পরিবর্তন করেছেন।
রাইসিনব্রানক্রাঞ্চ

5
আপনার ফাইলের নাম / পাথগুলিতে ফাঁকা স্থান থাকলে এটি কাজ করে না তা নোট করুন। আমি মনে করি git ls-files -d | sed -e "s/\(.*\)/'\1'/" | xargs git checkout --কাজ করবে।
পার্সলে 72

79

যেহেতু আপনি একটি করছেন git checkout ., দেখে মনে হচ্ছে আপনি নিজের শাখাটি শেষ প্রতিশ্রুতিবদ্ধ স্থিতিতে ফিরিয়ে আনার চেষ্টা করছেন।

আপনি এটি দিয়ে এটি অর্জন করতে পারেন git reset HEAD --hard

সতর্কতা

এটি করার ফলে আপনার সর্বশেষতম পরিবর্তনগুলি মুছে ফেলা হতে পারে এবং আপনার পরিবর্তনগুলি আনস্টেজ করা যেতে পারে, যেমন, আপনি কাজ হারাতে পারেন। এটি আপনি যা চান তা হতে পারে তবে এটি নিশ্চিত করার জন্য ডক্সটি পরীক্ষা করে দেখুন ।


39
Woww !! এর সাথে সাবধান !!!! আপনি ঠিক থাকতে পারেন, তবে কেউ বিভ্রান্ত হতে পারে এবং তাদের পুরো কোডটি উড়িয়ে দিতে পারে। আপনি যদি আরও বড় সতর্কতা যোগ করেন তবে শীতল হবেন।
সান্টিয়াগোবসুল্টো

3
এটাই আমার দরকার ছিল। আপনার পুরো কোডটি ফুটিয়ে তোলে না - কেবল আপনাকে আপনার সাম্প্রতিক প্রতিশ্রুতিতে ফিরিয়ে আনে।
অ্যান্ড্রু হেন্ডরি

2
আমি এক পর্যায়ে শত শত হারিয়ে যাওয়া ফাইল দিয়ে শেষ করেছি। সমস্যাটি সমাধানের একমাত্র ব্যবহারিক উপায়। ধন্যবাদ!
জোনাথন বেন

66

যদি আপনি ব্যবহার

git rm filename

তারপরে একটি ফাইল মুছতে

git checkout path/to/filename

কাজ করে না, তাই সেক্ষেত্রে

git checkout HEAD^ path/to/filename

কাজ করা উচিত


2
আমি এই উত্তর পছন্দ। কোনও সন্দেহ নেই যে আপনি মুছে ফেলা কেবলমাত্র নির্দিষ্ট ফাইলটিকেই আপনি প্রভাবিত করছেন । 1) গিট চেকআউট পথ / থেকে / ফাইল নাম 2) গিট চেকআউট - পাথ / থেকে / ফাইল নাম
মাউন্টেনের এড

চমৎকার। git checkout HEAD^ path/to/filenameআমি ফাইলটি প্রতিশ্রুতিবদ্ধ না হওয়ার কারণে আমার পক্ষে কাজ করেছিল।
মূসা এনদাদা

29

এই আদেশটি আমার ম্যাকে আমাকে সহায়তা করেছে। আমি অন্যান্য কয়েকটি সমাধানের চেষ্টা করেছি কিন্তু সেগুলি আমার পক্ষে কার্যকর হয়নি।

ওএসএক্স ম্যাভেরিক্সের গিট সংস্করণ

mac-pro:main chris$ git version
git version 1.8.5.2 (Apple Git-48)

হুকুম

git checkout HEAD -- path/to/file/file.cc


18

git ls-filesচেকআউট মুছে ফেলা (-ড) বা সংশোধিত (-ম) ফাইল ব্যবহার করতে পারেন

git checkout $(git ls-files -d)

দেখতে আমি কিভাবে একটি Git চেকআউট শুধুমাত্র পরিবর্তিত ফাইল পুনরুদ্ধার করতে পারেন?


অন্যান্য সমাধানের তুলনায় অনেক ভাল এবং সরল
joshi123

1
কিছু ফাইলের স্থান থাকলে আপনি করতে পারেন git ls-files -d | xargs -I{} git checkout "{}"
জিন পল

17

আপনি যদি একবারে সমস্ত ফাইল পুনরুদ্ধার করতে চান

পিরিয়ডটি ব্যবহার করতে ভুলবেন না কারণ এটি সমস্ত ফাইলকে দখল করতে গিটকে বলে।

এই আদেশটি মাথাটি পুনরায় সেট করবে এবং সমস্ত পরিবর্তনগুলি আনস্টেজ করবে:

$ git reset HEAD . 

তারপরে সমস্ত ফাইল পুনরুদ্ধার করতে এটি চালান:

$ git checkout .

তারপরে গিট স্ট্যাটাস দিলে আপনি পাবেন:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

এটি সহজতম সমাধান এবং ফাইলগুলির গুচ্ছের জন্য কাজ করে (ধরা যাক আপনি একাধিক ফাইল / ফোল্ডার মুছে ফেলেছেন)। ভাল জব
ডিউড

9

তোমাকে দেখতে চাই করতে না এই

এটি আপনি যে ক্ষেত্রে ব্যবহার করেছেন সে ক্ষেত্রে যায়

git checkout -- .

কিছু করার আগে

আপনি এখনও তৈরি করা হয়নি এমন তৈরি করা ফাইলগুলি থেকে মুক্তি পেতে চাইতে পারেন। এবং আপনি তাদের চান না। সঙ্গে :

git reset -- .

আপনি যে উত্তরটি অনুলিপি করেছেন তা আপনি সম্পূর্ণরূপে জানাননি। বস্তুত git checkout -- .একেবারে ডিলিট করা ফাইল পুনরুদ্ধার করতে সাহায্য করে না এবং কি প্রশ্নকর্তা চেষ্টা সমতূল্য: git checkout .। অংশ যা যা করতে পারেন কাজ এক কপি করা হয়নি হল: git checkout <file_path>
জিন পল

6

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

$ git reset <commitid#-where-file.cpp-existed> file.cpp

ফাইলটি ফিরিয়ে আনতে আমাকে রিসেটের পাশাপাশি আরও একটি পদক্ষেপ করতে হয়েছিল:

$ git checkout -- file.cpp

4

যদি আপনি কোনও পরিবর্তন প্রতিশ্রুতি না করেন তবে আপনাকে যা করতে হবে তা হ'ল সেই পরিবর্তনগুলি সংযুক্ত করা এবং আপনি শেষ কার্যনির্বাহী প্রতিশ্রুতিতে ফিরে আসবেন।

git stash
git stash clear
git clean 

এটি স্ট্যাশ স্ট্যাকের উপর রাখা কোনও সমাধান নয়। এটি একটি হ্যাক।
রবার্ট ডলকা

2
এটি স্ট্যাশ থেকে মুছে ফেলতে পারে কারণ এটি দুর্দান্ত সমাধান। যদি হ্যাক হয় বা না হয় তবে এটি স্বাদের বিষয়। স্ট্যাশ সম্পর্কে পুরো ধারণাটি চতুর হ্যাক।
Eino Mäkitalo

@ আইনোমেকিটালো খুশি যে এটি আপনার পক্ষে সহায়ক হতে পারে :)
রিক

আমি তালিকাভুক্ত সকলের মধ্যে এই পদ্ধতির
সেরাটি পছন্দ করি

3

যদি আপনি একটি মুছে ফেলা ডিরেক্টরি খুঁজছেন।

 git checkout ./pathToDir/*

3

অন্যকে সহায়তা করার জন্য এখানে রেফারেন্স হিসাবে বিভিন্ন মামলা রয়েছে:

যদি মোছাটি প্রতিশ্রুতিবদ্ধ না হয় তবে নীচের কমান্ডটি কার্যকারী গাছের মধ্যে মুছে ফেলা ফাইলটি পুনরুদ্ধার করবে।

$ git checkout -- <file>

নীচের কমান্ডটি ব্যবহার করে আপনি কার্যক্ষম গাছের সমস্ত মুছে ফেলা ফাইলের একটি তালিকা পেতে পারেন ।

$ git ls-files --deleted

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

#find the commit hash where it had this file deleted
$ git rev-list -n 1 HEAD -- <file>

এটি আপনাকে এমন কিছু দেওয়া উচিত c46e81aa403ecb8a0f7a323a358068345, এখন এখানে # কমিট ব্যবহার করুন

$ git checkout <commit>^ -- <file>

এরকম কিছু: it গিট চেকআউট c46e81aa403ecb8a0f7a323a358068345 -

আপনি যদি ফাইলটি পুনরুদ্ধার করার জন্য সন্ধান করছেন তবে নীচের কমান্ডটি সমস্ত মুছে ফেলা ফাইলের সংক্ষিপ্তসার প্রদর্শন করবে।

$ git log --diff-filter=D --summary

আপনি যদি কেবল ফাইলগুলির তালিকা প্রদর্শন করতে চান:

git log --diff-filter=D --summary | grep "delete mode"

2

আমার জন্য কি কাজ ছিল git checkout {SHA1 of commit with version to restore} "{path to file to restore}"

উদাহরণ স্বরূপ git checkout 5a6b3179e58edff9c90326b9a04284b02fd67bd0 "src-ui/views/includes/radar.pug"

(যে শাখায় আমরা ফাইলটি প্রবেশ করতে চাই তাতে মৃত্যুদন্ড কার্যকর করা হয়েছে)

এই কমান্ডটি কার্যকর করার পরে, পুনরুদ্ধার করা ফাইলটি আসল অবস্থানে উপস্থিত থাকবে (যা কমিট করতে হবে)


এবং / অথবা কেবলমাত্র এমন কোনও git checkout master path/to/the/file.binযাতে আপনার করা অন্য কোনও পরিবর্তন না হারিয়ে আপনি কেবল ফাইলটি মুছে ফেলুন। পিএস: এটি গ্রহণযোগ্য উত্তর হওয়া উচিত ...
এডোয়ার্ডো

1

আপনি যদি টোরেজজিআইটি ইনস্টল করেন তবে প্যারেন্ট ফোল্ডার পপআপ-মেনুতে কেবল "রিভার্ট ..." মেনু আইটেমটি নির্বাচন করুন।


1

1. আপনি যে বিশেষ প্রতিশ্রুতি ব্যবহার করে প্রত্যাবর্তন করতে চান তা আবিষ্কার করুন:

   git log
This command will give you a list of commits done by you .

2. ব্যবহার করে যে প্রতিশ্রুতিবদ্ধ তা পূরণ করুন:

    git revert <commit id> 

এখন আপনার স্থানীয় শাখায় বিশেষত সমস্ত ফাইল থাকবে


আপনি যদি ইতিমধ্যে আপনার পরিবর্তনগুলি কমিট করে থাকেন তবে এটি কাজ করে।
লাইভ-

1

সতর্কতা: আপনি প্রথমে ধরে রাখতে চান এমন কোনও কাজ করুন।

আপনি আপনার কর্মক্ষেত্র পুনরায় সেট করতে পারেন (এবং মুছে ফেলা ফাইলগুলি পুনরুদ্ধার করতে পারেন)

git checkout ./*

2
এফওয়াইআই ... এই কমান্ডটি আমার সমস্ত কার্যকরী ফাইল মুছে ফেলেছে এবং মুছে ফেলা ফাইলটি পুনরুদ্ধার করে নি..বিওয়্যার
হেন্ডার

এজন্য আপনি এই আদেশটি আপনার ওয়ার্কস্পেসটি পুনরায় সেট করতে ব্যবহার করেন। আমি ভেবেছিলাম এটি স্ব-ব্যাখ্যামূলক হবে।
হেনরিক ফ্লোরানসিও

1
এই কমান্ডটি কাজ করে না কারণ যদি ফাইলটি মুছে ফেলা হয় তবে এটি ধরা পড়বে না ./*
জিন পল

@ জিনপল সম্ভবত আমি ভুল বুঝাবুঝি করছি তবে এটি আমার কর্মক্ষেত্রটিকে মূল অবস্থায় ফেলেছে (মুছে ফেলা ফাইলটি এখন উপস্থিত)।
মার্ক

@ মার্ক এটি কাজ করতে পারে তবে কেবল ডিরেক্টরিতে কোনও দৃশ্যমান ফাইল না থাকলে, কারণ অন্যথায় গিটকে ./*প্রেরণের আগে ফাইলগুলি মেলে বাশ দ্বারা প্রসারিত করা হবে।
জিন পল

0

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


-1

আমার একই সমস্যা ছিল এবং আমি এখানে যা উত্তর দিয়েছি সেগুলির কোনওটির জন্যই আমি কাজ করিনি। আমি ইন্টেলিজ ব্যবহার করছি এবং git checkout -b minimalExampleকিছু সংখ্যক ফাইল মুছে ফেলা এবং প্রকল্পের অন্যদের গুচ্ছকে সংশোধন করে কিছু সমস্যার নতুন শাখায় একটি "ন্যূনতম উদাহরণ" তৈরি করতে আমি একটি নতুন শাখা পরীক্ষা করে দেখেছি । দুর্ভাগ্যক্রমে, যদিও আমি নতুন "সর্বনিম্ন উদাহরণ" শাখায় কোনও পরিবর্তন আনি নি, যখন আমি আমার "মূল" শাখাটি আবার পরীক্ষা করে দেখি "ন্যূনতম উদাহরণ" শাখা থেকে সমস্ত পরিবর্তন এবং মুছে ফেলা হয়েছে " আসল "শাখাটিও (বা এটি প্রদর্শিত হয়েছিল) মতে git statusএকেবারে ডিলিট করা ফাইল মাত্র উভয় শাখা থেকে চলে গেছে।

সৌভাগ্যক্রমে, যদিও ইন্টেলিজ আমাকে "এই ফাইলগুলি মুছে ফেলা পুরোপুরি পুনরুদ্ধারযোগ্য না" বলে সতর্ক করেছিল, আমি তাদের পুনরুদ্ধার করতে সক্ষম হয়েছিল (যে সর্বনিম্ন উদাহরণের শাখা থেকে তারা প্রকৃতপক্ষে মুছে ফেলা হয়েছিল) এই প্রকল্পে ডান ক্লিক করে এবং স্থানীয় ইতিহাস নির্বাচন করে > ইতিহাস দেখান (এবং তারপরে আমার সর্বাধিক সাম্প্রতিক ইতিহাসের আইটেমটি পুনরুদ্ধার করুন)। ইন্টেলিজ "সর্বনিম্ন উদাহরণ" শাখায় ফাইলগুলি পুনরুদ্ধার করার পরে, আমি শাখাটি উত্সে ঠেলে দিয়েছি। তারপরে আমি আমার "আসল" স্থানীয় শাখায় ফিরে গেলাম এবং git pull origin minimalExampleতাদের "মূল" শাখায় ফিরে পেতে দৌড়ে এসেছি ।

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