git আমি কিভাবে গিট রিসেট পূর্বাবস্থায় ফেরানো যাবে - মাথা ~ ~ 1?





6 Answers

আপনি যা করতে চান তা হল আপনি যে সংস্থানটি পুনরুদ্ধার করতে চান সেটির sha1 উল্লেখ করতে হয়। আপনি রিফ্লগ ( git reflog ) পরীক্ষা করে এবং তারপর করছেন sha1 পেতে পারেন

git reset --hard <sha1 of desired commit>

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

git version-control git-reset

নিম্নলিখিত কমান্ডের দ্বারা সৃষ্ট পরিবর্তনগুলি পূর্বাবস্থায় ফেরানো সম্ভব? যদি তাই হয়, কিভাবে?

git reset --hard HEAD~1



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

Fsck সঙ্গে fsck dangling একটি সংক্ষিপ্ত বিবরণ পান:

$ git fsck --lost-found
dangling commit b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf

রিবেজ সঙ্গে dangling কমিট পুনরুদ্ধার করুন:

$ git rebase b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf



আইআরএল কেস উদাহরণ:

$ 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.



অধিকাংশ ক্ষেত্রে, হ্যাঁ।

রাষ্ট্রের উপর নির্ভর করে আপনার রিপোজিটরিটি যখন আপনি কমান্ডটি চালান তখন git reset --hard এর প্রভাবগুলি ক্ষুদ্র থেকে পূর্ব পর্যন্ত পূর্বাবস্থায় অসম্ভব হতে পারে।

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

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

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

আপনি যদি git reset দৌড়ান এবং যেহেতু অন্য কিছু না করে থাকেন তবে আপনি এই এক-মাছ ধরার সাথে যেখানে ছিলেন তা ফিরে পেতে পারেন:

git reset --hard @{1}

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

তবে, যদি আপনি রিসেট থেকে আপনার শাখায় অন্যান্য পরিবর্তন করেছেন, উপরের এক-লাইনার কাজ করবে না। পরিবর্তে, আপনার <branchname> 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

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

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

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

এই বিষয়ে বিস্তারিত জানার জন্য, স্টেজিং এলাকায় অস্বাভাবিক ফাইলগুলির সাথে পূর্বাবস্থায় ফিরিয়ে আনুন গিট রিসেট - দেখুন।

আমি আমার কাজ ডিরেক্টরির মধ্যে ফাইল পরিবর্তন ছিল যে আমি git add সঙ্গে কখনও staged, এবং কখনও প্রতিশ্রুতিবদ্ধ। এখন আমার পরিবর্তন চলে গেছে!

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

--hard

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

এটি সম্ভব যে আপনি কোনও ধরণের ডিস্ক পুনরুদ্ধারের উপযোগ বা পেশাদার ডেটা পুনরুদ্ধারের পরিষেবায় আপনার পরিবর্তনগুলি পুনরুদ্ধার করতে সক্ষম হবেন তবে এই মুহুর্তে এটি সম্ভবত তার মূল্যের চেয়ে বেশি সমস্যা।




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

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

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

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

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

git reset --hard  
git fsck  

আপনি একটি dangling blob ce013625030ba8dba906f756967f9e9ca394464a পাবেন

git show ce01362  

আপনি ফাইল কন্টেন্ট "হ্যালো" ফিরে দিতে হবে

Unreferenced commits খুঁজে পেতে আমি কোথাও এই পরামর্শ একটি টিপ পাওয়া।

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

আমি গিট gui একটি টুল হিসাবে এটি আছে এবং এটি খুব সহজ।




একটি খুঁজছেন খুঁজছেন কমিট সামান্য সহজ করতে একটি ছোট স্ক্রিপ্ট তৈরি:

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

হ্যাঁ, এটি awk বা এটির মত কিছু সঙ্গে সুন্দর prettier করা যেতে পারে, কিন্তু এটা সহজ এবং আমি শুধু এটা প্রয়োজন। অন্য কেউ 30 সেকেন্ড সংরক্ষণ করতে পারে।




Related