গিট দুর্নীতিগ্রস্থ মাস্টার শাখা


9

আমি একটি ভিজ্যুয়াল স্টুডিও প্রকল্পের জন্য উইন্ডোজ 7 এ গিট এক্সটেনশনগুলি ব্যবহার করে আমার গিট সংগ্রহস্থলটি খুলি। হঠাৎ খালি হয়ে গেছে। ভান্ডারটি বিদ্যমান, তবে আমার সমস্ত অঙ্গীকার অদৃশ্য হয়ে গেল।

আমি গ্রাফিকাল ইন্টারফেস ব্যবহার করছি এবং আমি বিশ্বাস করি যে তারা এটি আপডেট করার পরে এটিই প্রথম আমি খুলেছি।

আমি নিশ্চিত না যে আমার কমান্ডগুলি ফিরে পেতে কী করণীয়।

আমি যখন টাইপ করি

git log 

আমি গ্রহণ করি

মারাত্মক: খারাপ ডিফল্ট সংশোধন 'হেড'

Https://stackoverflow.com/questions/1545407/recovering-broken-git-repository
দেখার পরে আপডেট করেছিলাম

গিট fsck

এটি ফিরে এসেছে:

ত্রুটি: অবৈধ HEAD
মারাত্মক: আলগা অবজেক্ট 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (.git / obj ects / 36 / b7d9e1ca496bcb864c0b9c8671fcec97fbda31 এ সঞ্চিত) দুর্নীতিগ্রস্থ

প্রতিশ্রুতিবদ্ধ প্রতিদান:

ত্রুটি: রেফারেন্স সমাধান করতে অক্ষম হেড: এই জাতীয় কোনও ফাইল বা ডিরেক্টরি
মারাত্মক: হেড রেফকে লক করতে পারে না

এবং লগিং মাস্টার শাখা ফেরত

it গিট লগ মাস্টার সতর্কতা: ভাঙ্গা রেফগুলি / মাথা / মাস্টার উপেক্ষা করে। সতর্কতা: ভাঙা রেফ রেফ / হেড / মাস্টার উপেক্ষা করা। মারাত্মক: অস্পষ্ট আর্গুমেন্ট 'মাস্টার': অজানা সংশোধন বা পথ কার্যকর গাছের মধ্যে নেই। সংশোধন থেকে পাথ পৃথক করতে '-' ব্যবহার করুন

আমি কেবল প্রাসঙ্গিক হতে পারে এমন জিনিসগুলি আটকে রাখি

it গিট রেফ্লগ মাস্টার
সতর্কতা: ভাঙ্গা রেফ / হেড / মাস্টার উপেক্ষা করে।
সতর্কতা: ভাঙা রেফ রেফ / হেড / মাস্টার উপেক্ষা করা।
মারাত্মক: অস্পষ্ট আর্গুমেন্ট 'মাস্টার': অজানা সংশোধন বা পথ কার্যকর গাছের মধ্যে নেই।
সংশোধন থেকে পাথ পৃথক করতে '-' ব্যবহার করুন

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

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



1
@ ভারী দয়া করে আপডেটটি দেখুন
মিঃজেডি

উত্তর:


3

ভান্ডারটি বিদ্যমান, তবে আমার সমস্ত অঙ্গীকার অদৃশ্য হয়ে গেল।

আপনি ঠিক কি বোঝাতে চেয়েছেন? কাজের গাছটি কি এখনও আছে? না .git/রয়েছে? এটিতে কোনও ফাইল আছে?

আপনার পোস্ট করা বার্তাগুলি থেকে বোঝা যায় যে ফাইলটির .git/HEADঅস্তিত্ব নেই। এটি কার্যকরী গাছের প্রত্যাশিত রাজ্যটি নির্ধারণ করে (আপনি যা পরীক্ষা করে দেখেছিলেন)। যদি সেই ফাইলটি চলে যায় তবে গিট জানে না আপনি কোথায় ছিলেন।

আপনি নিজে এই ফাইলটি তৈরি করার চেষ্টা করতে পারেন: ref: refs/heads/master

আপনি যদি অন্য কোনও শাখায় থাকেন তবে কেবল শাখার নাম দিয়ে "মাস্টার" প্রতিস্থাপন করুন। আপনি যদি একটি শাখায় না থাকতেন তবে এটি আরও জটিল হবে।

.git/logs/HEADনীচের দিকে পরে লাইনগুলি সহ HEAD এর অতীতের রাজ্যগুলি রেকর্ড করে। এই উদাহরণ লাইনটি একটি চেকআউট দেখায়: 25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <rainer.blome@wherever.you.are.com> 1346938344 +0200 checkout: moving from master to MySuperBranch

সামনের SHA1 গুলি কমিটগুলি বোঝায়। উদাহরণস্বরূপ, শাখার লগে আপনার এটি সন্ধানের পক্ষে সক্ষম হওয়া উচিত .git/logs/refs/heads/master

আপনার দেওয়া গিট রিফ্লগ আউটপুটটি হ'ল এটিও refs/heads/masterঅনুপস্থিত। এর একমাত্র বিষয়বস্তু এটির সর্বশেষ প্রতিশ্রুতি (এবং একটি নতুন লাইন) এর SHA1 হওয়ার কথা। উদাহরণস্বরূপ, শাখার লগের শেষে আপনি সর্বশেষতম SHA1 খুঁজে পেতে পারেন .git/logs/refs/heads/master


2

যদি .git / HEAD উপস্থিত থাকে এবং এর সামগ্রীটি ref: refs/heads/masterফাইল রেফ / হেডস / মাস্টারটি চেক করে তবে এতে অবশ্যই শেষ প্রতিশ্রুতিটির sha1 থাকতে হবে।

যদি সেই ফাইলটি দুর্নীতিগ্রস্থ এবং NULL অক্ষরগুলি পূর্ণ হয়ে থাকে তবে সেই ফাইলটি সম্পাদনা করুন এবং সর্বশেষ কমিটের .git/logs/HEADআগে বা একের আগে সর্বশেষ কমিটের sha1 রেখে দিন ।

তাহলে কর git reset --hard 'sha1 of the commit that you selected'


এটি সত্যই নূলে অক্ষরে পূর্ণ ছিল তাই আমি পূর্বের প্রতিশ্রুতিগুলির sha1 এ রেখেছিলাম, তবে গিট পুনরায় সেট করার ফলে "ত্রুটি হয়েছিল: আপডেট_রেফ রেফ 'হেড'-এর জন্য ব্যর্থ হয়েছে: রেফ' হেড 'লক করতে পারে না: রেফারেন্স সমাধান করতে অক্ষম হেড: অবৈধ যুক্তি "
চমত্কার

1

মনে হচ্ছে আপনার রেপো দূষিত হয়েছে। সবচেয়ে সহজ কাজটি হ'ল ব্যাকআপ থেকে আপনার রেপো পুনরুদ্ধার করা বা মূল উত্স থেকে রেপো ক্লোন করা (ধরে নিবেন যে রেপোতে আপনার প্রচুর পরিমাণে কাজ নেই)।

যদি রেজোট্রিং / ক্লোনিংয়ের বিকল্প না হয় তবে আমি প্রো গিট (ফ্রি অনলাইন বই বা কাগজের সংস্করণ ) এর মাধ্যমে পড়ার পরামর্শ দেব । পুরো বইটি অত্যন্ত তথ্যবহুল, তবে গিটার অভ্যন্তরীণভাবে কীভাবে কাজ করে তার একটি ধারণা পেতে বিশেষত শেষ অধ্যায়ে একবার দেখুন। গিট কীভাবে কাজ করে তা আপনার একবার বুঝতে পারলে, দূষিত পদার্থ পুনরুদ্ধারের বিষয়ে লিনাসের নির্দেশাবলী একবার দেখুন ।


সুতরাং, দু: খজনকভাবে আমি লুকানো ফাইলগুলি ব্যাক আপ করছিলাম না, .git লুকানো ছিল। আমার কাছে পুরো বইটি পড়ার পক্ষে যথেষ্ট সময় নেই, আপনি কি মনে করেন যে আমি চেষ্টা করতে পারি?
মিঃজেডি 10'12

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

0

কিছুক্ষণ ওয়েবের মাধ্যমে সার্ফিং করার পরে, অবশেষে আমি এটি খুঁজে পেয়েছি এবং এটি কার্যকর হয়েছে।

git fetch origin
git reset --hard origin/master

এটি থেকে কোনও পরিবর্তন আসে origin(আশা করি স্থানীয়ভাবে খুব বেশি কাজ করা হবে না), এবং তারপরে স্থানীয় masterশাখাটিকে রিমোটের সাথে একমত হতে বাধ্য করে । সাবধান, --resetমানে কোনও স্থানীয় পরিবর্তন বাতিল ! তদ্ব্যতীত, যদি এটি খুব বেশি ভাঙা না হয় তবে কেবল শাখার git reset origin/masterসর্বশেষ জ্ঞাত (চেক ইন) অবস্থা পুনরুদ্ধার করতে পারত master
ভনব্র্যান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.