আমি গিট রিসেটটি কীভাবে পূর্বাবস্থায় ফিরতে পারি - HEAD? 1?


1154

নিম্নলিখিত আদেশটি দ্বারা পরিবর্তনগুলি কি পূর্বাবস্থাপন করা সম্ভব? যদি তাই হয়, কিভাবে?

git reset --hard HEAD~1

8
গিটের সাথে হারিয়ে যাওয়া কোনও প্রতিশ্রুতি পুনরুদ্ধার করার জন্য আমি একটি সম্পূর্ণ গাইড লিখেছি। এমনকি এর চিত্রও রয়েছে :-) [এটি পরীক্ষা করে দেখুন] [ফিক্স লিঙ্ক] [ফিক্স লিঙ্ক]: প্রগ্রেম্বলিংস
২০০৮

12
--hardঅনির্দিষ্ট পরিবর্তন বাতিল। যেহেতু এগুলি গিট দ্বারা ট্র্যাক করা যায় না, গিটের মাধ্যমে সেগুলি পুনরুদ্ধার করার কোনও উপায় নেই।
জাজ


1
এই আপনার ফাইল পুনরুদ্ধার আপনাকে সহায়তা করার জন্য একটি মহান নিবন্ধ।
জান সোয়ার্ট

2
এটি সরাসরি
গিথুব

উত্তর:


1770

প্যাট নটজ সঠিক। কিছুদিনের মধ্যেই আপনি যতক্ষণ প্রতিশ্রুতিবদ্ধ তা ফিরে পেতে পারেন। গিট কেবলমাত্র এক মাস বা তার পরে আবর্জনা সংগ্রহ করে যতক্ষণ না আপনি স্পষ্টভাবে নতুন ব্লবগুলি সরাতে বলুন।

$ git init
Initialized empty Git repository in .git/

$ echo "testing reset" > file1
$ git add file1
$ git commit -m 'added file1'
Created initial commit 1a75c1d: added file1
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file1

$ echo "added new file" > file2
$ git add file2
$ git commit -m 'added file2'
Created commit f6e5064: added file2
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file2

$ git reset --hard HEAD^
HEAD is now at 1a75c1d... added file1

$ cat file2
cat: file2: No such file or directory

$ git reflog
1a75c1d... HEAD@{0}: reset --hard HEAD^: updating HEAD
f6e5064... HEAD@{1}: commit: added file2

$ git reset --hard f6e5064
HEAD is now at f6e5064... added file2

$ cat file2
added new file

আপনি উদাহরণটিতে দেখতে পারেন যে হার্ড রিসেটের ফলস্বরূপ ফাইল 2 সরানো হয়েছিল, তবে আমি যখন রিফ্লগের মাধ্যমে পুনরায় সেট করি তখন তা আবার স্থাপন করা হয়েছিল।


222
আপনি "গিট রিসেট - হেয়ার @ {1}" ব্যবহার করতে পারেন, SHA1 ব্যবহারের দরকার নেই। বেশিরভাগ ক্ষেত্রে এটি "গিট রিসেট - ওআরআইজিএইইডিএইডি" ব্যবহার করার জন্য পর্যাপ্ত হওয়া উচিত।
জাকুব নরবস্কি

39
git log -gরিফ্লগটি দেখার চেয়ে একটু সুন্দর উপায় হতে পারে git reflog
ড্যান মোল্ডিং

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

3
So ঠিক তাই আপনি কীভাবে জানবেন যে আপনি পুনরায় সেট করার আগে আপনার স্থানীয় পরিবর্তনগুলি সংযুক্ত করতে পারেন - এবং তারপরে সেগুলি পপ করুন এবং আপনি কিছুই হারাবেন না! ভালোবাসার গিট।
লেথজাকমান

5
আমি কেবলমাত্র git reflogতার চেয়ে বেশি পছন্দ করি git log -gকারণ আপনি sha1, হেড তথ্য এবং একটি সারিতে থাকা সমস্ত বার্তাগুলি প্রতিশ্রুতিবদ্ধ প্রতি এক লাইনে সমস্ত তথ্য পান। পড়তে অনেক সহজ।
স্নো ক্র্যাশ

369

আপনি যা করতে চান তা হ'ল আপনি যে প্রতিশ্রুতিতে পুনঃস্থাপন করতে চান তার sha1 নির্দিষ্ট করা। আপনি রেফ্লোগ ( git reflog) পরীক্ষা করে এবং এর পরে sha1 পেতে পারেন

git reset --hard <sha1 of desired commit>

তবে খুব বেশি সময় অপেক্ষা করবেন না ... কয়েক সপ্তাহ পরে গিটটি অবশেষে সেই প্রতিশ্রুতিহীন হিসাবে দেখবে এবং সমস্ত ব্লব মুছে ফেলবে।


2
কয়েক মিনিট আগে আমার জন্য সতর্কতা : এটি সমস্ত পরিবর্তন পুনরায় সেট করবে। যদিও এটির তালিকাভুক্ত ফাইলগুলিকে স্পর্শ করবে না।
এক্সেল

174

উত্তরটি উপরে বর্ণিত প্রতিক্রিয়াতে লুকিয়ে রয়েছে, আপনি কেবল তা করতে পারেন:

$> git reset --hard HEAD@{1}

( গিট রিফ্লগ শোয়ের আউটপুট দেখুন )


17
মনে রাখবেন যে আপনি যদি রিসেটের পরে অন্য কোনও রেপো পরিবর্তন করে থাকেন তবে এটি সমাধান নয়। অবশ্যই কিছু চালানোর আগে রিফ্লোগটি একবার দেখুন।
forresthopkinsa

2
দুর্ঘটনাক্রমে আমার ভান্ডার পুনরায় সেট করুন, ভেবেছিলেন আমার কাজ চিরতরে হারিয়ে গেছে। এই উত্তরটি আমার দিনকে বাঁচিয়েছিল।
জায়েং লি

Woh! আপনি সত্যিই আমাকে দিনটি বাঁচান =)
jfcogato

গ্রেট। এটা সত্যিই সাহায্য করেছে।
প্রশান্ত বিরদর

116

যদি গিট এখনও আবর্জনা সংগ্রহ না করে তবে এটি পুনরুদ্ধার করা সম্ভব।

এর সাথে ঝুঁকিপূর্ণ কমিটগুলির একটি ওভারভিউ পান fsck:

$ git fsck --lost-found
dangling commit b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf

পুনর্বাসনের সাথে জড়িত প্রতিশ্রুতি পুনরুদ্ধার করুন:

$ git rebase b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf

1
এটি দুর্দান্ত উপাদান L জীবন রক্ষিত।
মোহাম্মাদ হাশাম

একটি বিশদ ব্যাখ্যা এখানে পাওয়া যাবে: माध्यम . com / @CarrieGuss/… । জীবন বাঁচানোর জিনিস।
tuan.dinh

49

আপনি যদি সত্যিই ভাগ্যবান হন তবে আমি যেমন ছিলাম আপনি আবার আপনার পাঠ্য সম্পাদকের কাছে ফিরে যেতে পারেন এবং 'পূর্বাবস্থায় ফিরে' যেতে পারেন।

আমি জানি এটি সত্যিই সঠিক উত্তর নয়, তবে এটি আমার অর্ধ দিনের কাজ বাঁচিয়েছিল তাই আশা করি এটি অন্য কারও জন্য একই রকম করবে!


3
এটি আসলে একটি খুব ভাল টিপ, আমাকে অনেক বার সাশ্রয় করেছে;) এবং গিটে কিছু করার চেয়ে সহজ উপায় ...
সেভেরিন

3
এবং এই পুরো পৃথিবীতে করুণাময় সমস্ত ধরণের জন্য আপনাকে ধন্যবাদ। ধন্যবাদ. ধন্যবাদ. ধন্যবাদ.
ট্রিপ

9
হার্ড রিসেটের পরে ফাইলগুলিতে অযাচিত পরিবর্তনগুলি পুনরুদ্ধার করার একমাত্র উপায় এটি। আমাকেও
বাঁচিয়েছে

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


44

যতদূর আমি জানি, --hardঅনিচ্ছাকৃত পরিবর্তনগুলি বাতিল করবে। যেহেতু এগুলি গিট দ্বারা ট্র্যাক করা হয় না। তবে আপনি পূর্বাবস্থায় ফিরে যেতে পারেন discarded commit

$ git reflog

তালিকা তৈরি করবে:

b0d059c HEAD@{0}: reset: moving to HEAD~1
4bac331 HEAD@{1}: commit: added level introduction....
....

যেখানে 4bac331হয় discarded commit

এখন কেবল সেই প্রতিশ্রুতিতে মাথা সরিয়ে নিন ::

$ git reset --hard 4bac331

34

আইআরএল মামলার উদাহরণ:

$ git fsck --lost-found

Checking object directories: 100% (256/256), done.
Checking objects: 100% (3/3), done.
dangling blob 025cab9725ccc00fbd7202da543f556c146cb119
dangling blob 84e9af799c2f5f08fb50874e5be7fb5cb7aa7c1b
dangling blob 85f4d1a289e094012819d9732f017c7805ee85b4
dangling blob 8f654d1cd425da7389d12c17dd2d88d318496d98
dangling blob 9183b84bbd292dcc238ca546dab896e073432933
dangling blob 1448ee51d0ea16f259371b32a557b60f908d15ee
dangling blob 95372cef6148d980ab1d7539ee6fbb44f5e87e22
dangling blob 9b3bf9fb1ee82c6d6d5ec9149e38fe53d4151fbd
dangling blob 2b21002ca449a9e30dbb87e535fbd4e65bac18f7
dangling blob 2fff2f8e4ea6408ac84a8560477aa00583002e66
dangling blob 333e76340b59a944456b4befd0e007c2e23ab37b
dangling blob b87163c8def315d40721e592f15c2192a33816bb
dangling blob c22aafb90358f6bf22577d1ae077ad89d9eea0a7
dangling blob c6ef78dd64c886e9c9895e2fc4556e69e4fbb133
dangling blob 4a71f9ff8262701171d42559a283c751fea6a201
dangling blob 6b762d368f44ddd441e5b8eae6a7b611335b49a2
dangling blob 724d23914b48443b19eada79c3eb1813c3c67fed
dangling blob 749ffc9a412e7584245af5106e78167b9480a27b
dangling commit f6ce1a403399772d4146d306d5763f3f5715cb5a    <- it's this one

$ git show f6ce1a403399772d4146d306d5763f3f5715cb5a

commit f6ce1a403399772d4146d306d5763f3f5715cb5a
Author: Stian Gudmundsen Høiland <stian@Stians-Mac-mini.local>
Date:   Wed Aug 15 08:41:30 2012 +0200

    *MY COMMIT MESSAGE IS DISPLAYED HERE*

diff --git a/Some.file b/Some.file
new file mode 100644
index 0000000..15baeba
--- /dev/null
+++ b/Some.file
*THE WHOLE COMMIT IS DISPLAYED HERE*

$ git rebase f6ce1a403399772d4146d306d5763f3f5715cb5a

First, rewinding head to replay your work on top of it...
Fast-forwarded master to f6ce1a403399772d4146d306d5763f3f5715cb5a.

2
ঝাঁকুনি ফোঁটা শোনায় কোনও AD & D দানব!
এসবিচেনকো

ধন্যবাদ @ স্টিয়ান ভাল ব্যাখ্যা করেছেন! আমি এই উত্তরটি খুঁজে পেতে অন্যদের জন্য যুক্ত করতে চাই যে আপনার যদি একাধিক "ঝুঁকির" প্রতিশ্রুতি থাকে তবে এটি নিশ্চিত নয় যে আপনি শেষ সারিতে রিবেস করতে চান :)
জিমি সুইডেন

গিট শো আমার কিছু ফাইল সংরক্ষণ করেছে, আপনাকে অনেক ধন্যবাদ!
উইলিয়াম

32

বেশিরভাগ ক্ষেত্রে, হ্যাঁ

আপনি যখন কমান্ডটি চালাচ্ছিলেন তখন আপনার সংগ্রহস্থলটি যে অবস্থাতে ছিল তার উপর নির্ভর করে এর প্রভাবগুলি git reset --hardতুচ্ছ থেকে শুরু করে পূর্বে, মূলত অসম্ভব পর্যন্ত হতে পারে।

নীচে আমি বিভিন্ন সম্ভাব্য পরিস্থিতিতে একটি পরিসীমা তালিকাভুক্ত করেছি এবং কীভাবে আপনি সেগুলি থেকে পুনরুদ্ধার করতে পারেন।

আমার সমস্ত পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ হয়েছিল, কিন্তু এখন কমিটগুলি চলে গেছে!

এই অবস্থাটি সাধারণত ঘটে যখন আপনি git resetযুক্তি হিসাবে চালিত হন git reset --hard HEAD~। চিন্তা করবেন না, এ থেকে পুনরুদ্ধার করা সহজ!

আপনি যদি কেবল দৌড়ে git resetএসেছেন এবং এর পরে আর কিছু না করেন তবে আপনি যেখানে এই ওয়ান লাইনারটি নিয়ে ছিলেন সেখানে ফিরে যেতে পারেন:

git reset --hard @{1}

এটি আপনার বর্তমান শাখাকে গতবার সংশোধন করার আগে যা ছিল তা পুনরায় সেট করে (আপনার ক্ষেত্রে, শাখায় সর্বাধিক সাম্প্রতিক পরিবর্তনটি আপনি যে পূর্বাবস্থায় ফিরে আসার চেষ্টা করছেন তা পুনরায় সেট করা হবে)।

তবে, আপনি আছে অন্যান্য পরিবর্তন আপনার শাখা রিসেট যেহেতু করেছেন, এক-লাইনের উপরে কাজ করবে না। পরিবর্তে, আপনার শাখায় করা সমস্ত সাম্প্রতিক পরিবর্তনের (রিসেটগুলি সহ) তালিকা দেখতে আপনার চালানো উচিত । এই তালিকাটি এরকম কিছু দেখবে:git reflog <branchname>

7c169bd master@{0}: reset: moving to HEAD~
3ae5027 master@{1}: commit: Changed file2
7c169bd master@{2}: commit: Some change
5eb37ca master@{3}: commit (initial): Initial commit

এই তালিকাটিতে অপারেশনটি সন্ধান করুন যা আপনি "পূর্বাবস্থায় ফিরে যেতে" চান। উপরের উদাহরণে এটি প্রথম লাইন হবে, যা "রিসেট: হেড ~" এ চলেছে বলেছে। তারপরে সেই অপারেশনের আগে (নীচে) প্রতিশ্রুতিবদ্ধতার প্রতিনিধিত্বের অনুলিপি করুন । আমাদের ক্ষেত্রে এটি master@{1}(বা 3ae5027, তারা উভয়ই একই প্রতিশ্রুতি উপস্থাপন করে) হবে এবং git reset --hard <commit>আপনার বর্তমান শাখাটিকে সেই প্রতিশ্রুতিতে পুনরায় সেট করতে চালাবেন ।

আমি আমার পরিবর্তনগুলি সাথে মঞ্চায়িত করেছি git add, তবে কখনও প্রতিশ্রুতিবদ্ধ না। এখন আমার পরিবর্তনগুলি চলে গেছে!

এটি থেকে পুনরুদ্ধার করা কিছুটা কৌশলযুক্ত। Git করে আপনি যে ফাইলগুলি যোগ কপি আছে, কিন্তু যেহেতু এই কপি কোন বিশেষ বাঁধা না হয় আপনি পুনঃস্থাপন করতে পারি না একবারে সমস্ত পরিবর্তন কমিট। পরিবর্তে, আপনাকে গিটের ডাটাবেসে পৃথক ফাইলগুলি সনাক্ত করতে হবে এবং ম্যানুয়ালি সেগুলি পুনরুদ্ধার করতে হবে। আপনি এটি ব্যবহার করে করতে পারেন git fsck

এই বিস্তারিত জানার জন্য দেখুন পূর্বাবস্থায় ফিরুন Git উপস্থাপনকারী এলাকায় মুক্ত ফাইলগুলির সাথে --hard রিসেট

আমার কর্মক্ষম ডিরেক্টরিতে ফাইলগুলির পরিবর্তন হয়েছিল যা আমি কখনই মঞ্চায়িত করি নি git addএবং কখনও প্রতিশ্রুতিবদ্ধ ছিল না। এখন আমার পরিবর্তনগুলি চলে গেছে!

আহ ওহ. আপনাকে এটি বলতে আমি ঘৃণা করি তবে আপনি সম্ভবত ভাগ্যের বাইরে রয়েছেন। গিট পরিবর্তন করে না যা আপনি এতে যুক্ত করেন না বা প্রতিশ্রুতি দেন না এবং ডকুমেন্টেশনgit reset অনুসারে :

--hard

সূচক এবং কার্যক্ষম গাছ পুনরায় সেট করে। কার্যক্ষেত্রের ট্র্যাক করা ফাইলগুলিতে যে কোনও পরিবর্তন <commit>বাতিল করা হয়েছে।

এটি যে আপনি সম্ভব পারে ডিস্ক পুনরুদ্ধারের ইউটিলিটি বা একটি পেশাদারী তথ্য পুনরুদ্ধার সেবা কিছু সাজানোর সঙ্গে আপনার পরিবর্তনগুলি পুনরুদ্ধার করতে সক্ষম হবে, কিন্তু এই বিন্দু সম্ভবত এটি এর মূল্য সব চাইতে বেশি কষ্টের যে এ।


1
ওয়ান-লাইনার আমার জন্য কাজ করেছিল, আপনাকে ধন্যবাদ, তবে আমি কেবল "@ {1}" কি ঠিক তা ভাবছি ..
স্ট্যান বাশতাভেনকো

1
@ স্ট্যানবি ডকুমেন্টেশনটি এখানে রয়েছে: git-scm.com/docs/git-rev-parse মূলত এটি বর্তমান শাখায় প্রথম রিফ্লগ প্রবেশকে বোঝায়।
Ajedi32

সমস্ত কেস কাভার করার জন্য ধন্যবাদ। আমি প্রতিশ্রুতিবদ্ধ বা আমার যোগ করা হয়নি।
xdhmoore

21

যদি আপনি এখনও আবর্জনা সংগ্রহ করেন না আপনার সংগ্রহস্থান (যেমন ব্যবহার করে git repack -dবা git gcতবে লক্ষ্য করুন যে আবর্জনা সংগ্রহও স্বয়ংক্রিয়ভাবে ঘটতে পারে), তবে আপনার প্রতিশ্রুতি এখনও আছে - এটি কেবলমাত্র হেডের মাধ্যমে পৌঁছানো যায় না।

এর আউটপুটটি দেখে আপনার প্রতিশ্রুতি সন্ধানের চেষ্টা করতে পারেন git fsck --lost-found

গীতের নতুন সংস্করণগুলিতে "রিফ্লগ" নামে কিছু রয়েছে যা রেফগুলিতে করা সমস্ত পরিবর্তনের লগ (রিপোজিটরি সামগ্রীতে করা পরিবর্তনের বিপরীতে)। সুতরাং, উদাহরণস্বরূপ, প্রতিবার আপনি আপনার হেড স্যুইচ করবেন (অর্থাত্ প্রতিবার আপনি git checkoutশাখাগুলি স্যুইচ করতে কোনও চেষ্টা করুন) যা লগ হবে। এবং, অবশ্যই, git resetআপনিও হেডকে চালিত করেছিলেন, তাই এটি লগও করা হয়েছিল। আপনি আপনার রিফের পুরানো রাজ্যগুলিকে একইভাবে অ্যাক্সেস করতে পারেন যেভাবে আপনি কোনও সংগ্রহের @পরিবর্তে একটি চিহ্ন ব্যবহার করে আপনার ভাণ্ডারগুলির পুরানো রাজ্যে অ্যাক্সেস করতে ~পারেন git reset HEAD@{1}

হেড @ {1} এবং হেড ~ 1 এর মধ্যে পার্থক্য কী তা বুঝতে আমার কিছুটা সময় লেগেছে, সুতরাং এখানে একটি ছোট ব্যাখ্যাটি দেওয়া হল:

git init
git commit --allow-empty -mOne
git commit --allow-empty -mTwo
git checkout -b anotherbranch
git commit --allow-empty -mThree
git checkout master # This changes the HEAD, but not the repository contents
git show HEAD~1 # => One
git show HEAD@{1} # => Three
git reflog

সুতরাং, এর HEAD~1অর্থ হ'ল "এইচআইডি বর্তমানে যে প্রতিশ্রুতিবদ্ধ সেটির আগে প্রতিশ্রুতিবদ্ধ হয়ে যান", যখনHEAD@{1} অর্থ "এইচএইডএইড যে প্রতিশ্রুতিবদ্ধ সেদিকে এটি যেদিকে নির্দেশ করেছে তার আগে এটি প্রতিশ্রুতিবদ্ধ হওয়াতে যান"।

এটি আপনাকে সহজেই আপনার হারিয়ে যাওয়া প্রতিশ্রুতি সন্ধান করতে এবং পুনরুদ্ধার করতে দেয়।


2
আরও একটি ব্যাখ্যা যা আমি মনে করি এটি আরও পরিষ্কার হবে: হেড ~ 1 এর অর্থ "হেডের পিতামাতার" কাছে যান, যখন হেড @ {1 ""
হেডের

1
সমস্যাটি হ'ল "ইতিহাস" শব্দটি সত্যই ভিসিএসগুলিতে অতিরিক্ত লোড। তবুও প্রকাশ করার আরেকটি উপায় হ'ল commit প্রতিশ্রুতিবদ্ধ ইতিহাসের পিছনে চলে যায়, যেখানে @ কালানুক্রমিক বা অস্থায়ী ইতিহাসে পিছনে চলে যায় । তবে তিনটি সংস্করণের কোনওটিই বিশেষ ভাল নয়।
Jörg ডব্লু মিটাগ

@ কিজক্স 2 (এবং জর্জি) আসলে এই 3 টি ব্যাখ্যা যখন এক সাথে নেওয়া হয় তখন অনেক সাহায্য করে - thx
রিচার্ড লে ম্যাসুরিয়ার

14

উত্তর দেওয়ার আগে কিছু ব্যাকগ্রাউন্ড যুক্ত করতে দেয় এটি কী তা ব্যাখ্যা করে HEAD

First of all what is HEAD?

HEADকেবলমাত্র বর্তমান শাখায় বর্তমান প্রতিশ্রুতি (সর্বশেষ) এর একটি উল্লেখ। যে কোনও সময়
কেবলমাত্র একা HEADথাকতে পারে । (বাদে git worktree)

এর সামগ্রীটি HEADভিতরে সঞ্চিত .git/HEADরয়েছে এবং এতে বর্তমান প্রতিশ্রুতিতে 40 বাইট এসএইএ -1 রয়েছে।


detached HEAD

অর্থ যে - আপনি সর্বশেষ কমিট উপর না হন, তাহলে HEADতার নামে একটি পূর্বে নির্দেশ করা হয় ইতিহাসে কমিট detached HEAD

এখানে চিত্র বর্ণনা লিখুন

কমান্ড লাইনে এটি দেখতে দেখতে শাখা -1 এর পরিবর্তে SHA-1 দেখতে পাবেন যেহেতু HEADবর্তমান শাখার অগ্রভাগের দিকে ইশারা করা হচ্ছে না

এখানে চিত্র বর্ণনা লিখুন


বিচ্ছিন্ন হেড থেকে কীভাবে পুনরুদ্ধার করবেন সে সম্পর্কে কয়েকটি বিকল্প:


git checkout

git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back

এটি পছন্দসই প্রতিশ্রুতি নির্দেশ করে নতুন শাখাটি চেকআউট করবে।
এই আদেশটি প্রদত্ত প্রতিশ্রুতিতে চেকআউট করবে।
এই মুহুর্তে আপনি একটি শাখা তৈরি করতে পারেন এবং এই বিন্দু থেকে কাজ শুরু করতে পারেন।

# Checkout a given commit. 
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>

# create a new branch forked to the given commit
git checkout -b <branch name>

git reflog

আপনি সর্বদা reflogপাশাপাশি ব্যবহার করতে পারেন ।
git reflogআপডেট হওয়া যে কোনও পরিবর্তন প্রদর্শন করবে HEADএবং কাঙ্ক্ষিত রিফ্লগ এন্ট্রি চেক HEADকরা এই প্রতিশ্রুতিতে ফিরে আসবে।

যতবারই হেডের সংশোধন করা হয় সেখানে একটি নতুন প্রবেশ থাকবে reflog

git reflog
git checkout HEAD@{...}

এটি আপনাকে আপনার কাঙ্ক্ষিত প্রতিশ্রুতিতে ফিরিয়ে আনবে

এখানে চিত্র বর্ণনা লিখুন


git reset HEAD --hard <commit_id>

আপনার মাথাটি পছন্দসই প্রতিশ্রুতিতে ফিরে যান।

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
  • দ্রষ্টব্য: ( গিট ২.7 থেকে )
    আপনি এটিও ব্যবহার করতে পারেন git rebase --no-autostash


git revert <sha-1>

প্রদত্ত প্রতিশ্রুতি বা প্রতিশ্রুতি ব্যাপ্তি "পূর্বাবস্থায় ফিরিয়ে দিন"।
রিসেট কমান্ড প্রদত্ত প্রতিশ্রুতিতে যে কোনও পরিবর্তন "পূর্বাবস্থায়" ফেলবে।
পূর্বাবস্থার প্যাচ নিয়ে একটি নতুন প্রতিশ্রুতিবদ্ধ করা হবে যখন মূল প্রতিশ্রুতি ইতিহাসেও থাকবে।

# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>

এই স্কিমাটি বোঝায় যে কোন আদেশটি কী করে।
আপনি দেখতে পারেন সেখানে reset && checkoutপরিবর্তন HEAD

এখানে চিত্র বর্ণনা লিখুন


এটি আপনার git reset HEAD --hard <commit_id>উদাহরণটি স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ৪১১৪০৯০৫ / থেকে নেওয়া হয়েছে বলে মনে হয় - যদি এটি হয় তবে আপনি অনুগ্রহ করে সম্পাদনা করতে পারেন?
রব

12

git reflog

  • আপনার প্রতিশ্রুতিবদ্ধ তালিকার তালিকায় সন্ধান করুন এবং তারপরে এটি অনুলিপি করুন এবং এটি কমান্ড করুন:

git cherry-pick <the sha>


1
গিট-চেরি-পিক - কিছু বিদ্যমান কমিট দ্বারা প্রবর্তিত পরিবর্তনগুলি প্রয়োগ করুন। আমি মনে করি এটি সহজ এবং এই প্রসঙ্গে খুব সহায়ক
অমিতেশ

1
হার্ড রিসেট পরিবর্তনগুলি কীভাবে পূর্বাবস্থায় আনতে হয় তা অনুসন্ধান করার জন্য প্রত্যেকে প্রত্যক্ষ এটি সন্ধান করে। এই উত্তরটি আরও
উত্সাহিত

@ ইরেনল আমি অনুমান করি যে আমি সবে অনুভব করেছি, লোকেরা অতিরিক্ত কাজ করা পছন্দ করে। হা হা
স্কটিব্ল্যাডেস

1
এটি হ'ল, আপনি কেবল আমার দিনটি সংরক্ষণ করেছেন 🙂
সিলভারনাস আকুবো

11

আমি জানি এটি একটি পুরানো থ্রেড ... তবে যতগুলি লোক গীতে জিনিস পূর্বাবস্থায় নেওয়ার উপায়গুলি সন্ধান করছে, তবুও আমি মনে করি যে এখানে টিপস দেওয়া চালিয়ে যাওয়া ভাল ধারণা হতে পারে।

আপনি যখন "গিট অ্যাড" করেন বা গিট গুইতে উপরের বাম থেকে নীচে বাম দিকে কিছু সরান তখন ফাইলের বিষয়বস্তু একটি ব্লাবে সংরক্ষণ করা হয় এবং সেই ফাইলটি থেকে ফাইলের সামগ্রী পুনরুদ্ধার করা সম্ভব।

সুতরাং কোনও ফাইল প্রতিশ্রুতিবদ্ধ না হলেও এটি পুনরুদ্ধার করা সম্ভব তবে এটি যুক্ত করা দরকার।

git init  
echo hello >> test.txt  
git add test.txt  

এখন ব্লবটি তৈরি করা হয়েছে তবে এটি সূচক দ্বারা রেফারেন্স করা হয়েছে যাতে আমরা রিসেট না হওয়া পর্যন্ত এটি গিট fsck এর সাথে তালিকাভুক্ত হবে না। সুতরাং আমরা রিসেট ...

git reset --hard  
git fsck  

আপনি একটি ঝনঝন ব্লব পাবেন ce013625030ba8dba906f756967f9e9ca394464a

git show ce01362  

আপনাকে ফাইলের সামগ্রী "হ্যালো" ফিরিয়ে দেবে

অবাস্তব কমিটস সন্ধানের জন্য আমি কোথাও এটির পরামর্শ দেওয়ার জন্য একটি টিপ পেয়েছি।

gitk --all $(git log -g --pretty=format:%h)  

গিট গুইয়ের একটি সরঞ্জাম হিসাবে আমার কাছে এটি রয়েছে এবং এটি খুব সহজ।


+1 টি। স্ট্যাকওভারফ্লোgit fsck --lost-found . com / a / 21350689 / 6309 তে উল্লিখিত হিসাবে , সহায়তা করতে পারে।
ভনসি

7

আপনি যদি জেটব্রেইনস আইডিই (কোনও ইন্টেলিজজ ভিত্তিক) ব্যবহার করছেন তবে আপনি তাদের "স্থানীয় ইতিহাস" বৈশিষ্ট্যের মাধ্যমে আপনার আপত্তিবিহীন পরিবর্তনগুলিও পুনরুদ্ধার করতে পারেন।

আপনার ফাইল ট্রিতে আপনার শীর্ষ-স্তরের ডিরেক্টরিতে ডান ক্লিক করুন, প্রসঙ্গ মেনুতে "স্থানীয় ইতিহাস" সন্ধান করুন এবং "ইতিহাস দেখান" নির্বাচন করুন। এটি এমন একটি দৃশ্য খুলবে যেখানে আপনার সাম্প্রতিক সম্পাদনাগুলি পাওয়া যাবে এবং আপনি যে সংস্করণটি আবার ফিরে যেতে চান তা পেয়ে গেলে, এটিতে ডান ক্লিক করুন এবং "রিভার্ট" ক্লিক করুন।


4

আমি সবেমাত্র ভুল প্রকল্পে একটি হার্ড রিসেট করেছি। আমার জীবন যা রক্ষা করেছিল তা হ'ল একলাইপসের স্থানীয় ইতিহাস। ইন্টেলিজ আইডিয়াতে এটিরও একটি রয়েছে বলে মনে হয় এবং তাই আপনার সম্পাদক এটি পরীক্ষা করার মতো:

  1. স্থানীয় ইতিহাসে ग्रहण সহায়তা বিষয়
  2. http://wiki.eclipse.org/FAQ_Where_is_the_workspace_local_history_stored%3F

1
জেটব্রেইনস সিওলিয়ানের স্থানীয় ইতিহাস দুর্দান্ত এবং আমার জন্য 2 ঘন্টা কাজ বাঁচিয়েছে :)
ফ্যাবিয়ান ক্যানাপ

3

প্রতিশ্রুতিবদ্ধ সন্ধান করা সন্ধান করা এটি সামান্য সহজ করার জন্য একটি ছোট স্ক্রিপ্ট তৈরি করেছে:

git fsck --lost-found | grep commit | cut -d ' ' -f 3 | xargs -i git show \{\} | egrep '^commit |Date:'

হ্যাঁ, এটি অ্যাজকে বা এটির মতো আরও কিছু দিয়ে খুব সুন্দর করা যেতে পারে তবে এটি সহজ এবং আমার কেবল এটির প্রয়োজন ছিল। অন্য কাউকে 30 সেকেন্ড বাঁচাতে পারে।


0

আমার সমস্যাও প্রায় একই রকম। আমি প্রবেশের আগে আমার অনুমতি ছাড়াই ফাইল আছে git reset --hard

সৌভাগ্যক্রমে। আমি এই সমস্ত উত্স এড়িয়ে যেতে পরিচালিত। আমি লক্ষ্য করার পরে আমি কেবল পূর্বাবস্থায় ফেরাতে পারি ( ctrl-z)। 😊 আমি কেবল উপরের সমস্ত উত্তরগুলিতে এটি যুক্ত করতে চাই।

বিঃদ্রঃ. ctrl-zখোলা ফাইলগুলি সম্ভব নয় ।


0

এটি আমার জীবন বাঁচিয়েছে: https://medium.com/@CarrieGuss/how-to-recover-from-a-git-hard-reset-b830b5e3f60c

মূলত আপনার চালানো দরকার:

for blob in $(git fsck --lost-found | awk ‘$2 == “blob” { print $3 }’); do git cat-file -p $blob > $blob.txt; done

তারপরে নিজের ফাইলগুলি সঠিক কাঠামোয় পুনরায় সংগঠিত করতে ম্যানুয়ালি ব্যথাটি কাটাচ্ছেন।

টেকওয়ে: git reset --hardআপনি যদি 100% এটি কীভাবে কাজ করে তা পুরোপুরি বুঝতে না পারলে কখনও ব্যবহার করবেন না, এটি ব্যবহার না করাই ভাল।

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