কম্পিউটার মারা যাওয়ার পরে গিট সংগ্রহস্থলটি ভেঙে যায়


95

আমার কম্পিউটারটি মারা গেছে এবং এখন আমার গিটের একটি ভাণ্ডার ভেঙে গেছে। আমি যখন মাস্টারকে চেকআউট করার চেষ্টা করি তখন তা আমাকে বলে:

warning: ignoring broken ref refs/heads/master.
error: Your local changes to the following files would be overwritten by checkout:
        com.vainolo.jdraw2d.releng.p2/pom.xml
Please, commit your changes or stash them before you can switch branches.
Aborting

আমি যখন মৃত্যুদন্ড কার্যকর git stashকরি তখন আমি পাই:

fatal: bad revision 'HEAD'
fatal: bad revision 'HEAD'
fatal: Needed a single revision
You do not have the initial commit yet

তাই আমি কি করতে পারি?

এর আউটপুট আপডেট করুনgit reflog :

fatal: bad default revision 'HEAD'

খুব প্রতিশ্রুতিবদ্ধ নয় ... এর ফলাফল git fsck:

error: Invalid HEAD
Checking object directories: 100% (256/256), done.
error: unable to unpack 59551f96b4e87a1c14293c19eb548ce6fa1f196f header
error: inflateEnd: stream consistency error (no message)
fatal: loose object 59551f96b4e87a1c14293c19eb548ce6fa1f196f (stored in .git/objects/59/551f96b4e87a1c14293c19eb548ce6fa1f196f) is corrupt

আপনি কি তা পরীক্ষা করে দেখতে পারেন .git/refs/heads/masterএবং এর লিখিত সামগ্রীটি আপনার ভাণ্ডারের বৈধ প্রতিশ্রুতি হ্যাশ (যদি আপনি এটি ব্যবহার করে উদাহরণস্বরূপ পরীক্ষা করতে পারেন git show <hash>)?
অকর্মা

আমি জানি এটি সুস্পষ্ট, তবে এখনও জিজ্ঞাসা করছি - আপনার কাছে একই গিট রেপোর কোনও রিমোট রেপো রয়েছে?
টাক্সডুড

বিষয়বস্তু @poke এর .git/refs/heads/master/একটি গুচ্ছ আছে^@
vainolo

@ টাক্সডুড হ্যাঁ, তবে আমার সর্বশেষ পরিবর্তনগুলিতে আপডেট হয়নি
ভ্যানোলো

4
কি git reflogবলে? আপনি কি দৌড়ানোর চেষ্টা করেছেন git fsck?
ক্যানান

উত্তর:


175

আমি এর মাধ্যমে পুনরুদ্ধার করতে পেরেছি:

rm .git/refs/remotes/origin/HEAD
git fetch --all

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

যদি কোনও নির্দিষ্ট গিট সাবমডিউলে সমস্যা দেখা দেয় তবে প্রথম কমান্ডটি কিছুটা পরিবর্তিত হয়rm <root repository path>/.git/modules/<path to the submodule>/refs/remotes/origin/HEAD
গোব

4
আমার করতে হয়েছিল rm -rf .git/refs/remotes/origin, তবে আপনি আমাকে সঠিক দিকে নির্দেশ করেছেন
জ্যাকা

24

ভাঙা গিট সংগ্রহস্থল পুনরুদ্ধার করার জন্য প্রস্তাবিত পদক্ষেপগুলি অনুসরণ করে শুরু করুন :

  • .git/refsএখনও দরকারী কিছু আছে কিনা তা পরীক্ষা করে দেখুন
  • চেক করুন git reflogএবং ব্যর্থ .git/logs/refs/heads/masterহোন যে আপনি যে লিখিত শাখায় শেষ ছিলেন
  • চালানো git fsck, --unreachableবা সাথে সম্ভাব্য--lost-found

এটি masterআশ্বাস দিয়ে রেফটি কী হওয়া উচিত তা নির্ধারণের জন্য এটি আপনাকে অনুমতি দেবে যাতে আপনি এটি পুনরুদ্ধার করতে পারেন (যেমন বিড়ালটি সঠিক SHA1 এর মধ্যে .git/refs/heads/master) cat

যদি এই প্রতিশ্রুতিতে অন্তর্ভুক্ত কোনও বস্তু সত্যই দূষিত হয় তবে HEADদুর্ভাগ্যক্রমে আপনি নিজের প্রতিশ্রুতি পুনরুদ্ধার করতে পারবেন না । ধরে নিচ্ছি আপনার কার্যনির্বাহী গাছ এবং / বা সূচি অক্ষত আপনি পূর্বের প্রতিশ্রুতিবদ্ধতার জন্য একটি git reset --soft(বা এটি ব্যর্থ করে git reset) চেষ্টা করতে পারেন এবং তারপরে কমিটটি পুনরায় করতে পারেন। আপনার কার্যকরী গাছ সা git checkout -fবা পরিবর্তন করে এমন কোনও অপারেশন এড়িয়ে চলুন git reset --hard


আমি তাকালাম .git/logs/refs/heads/mybranch। এটি এই শাখায় একরকমের ইতিহাসের ইতিহাস দেখায়। এর মাধ্যমে খনন করে আমি SHAs বাছাই করে সেগুলি প্রদর্শন করার চেষ্টা করেছি git show। (প্রতিটি প্রতিশ্রুতিতে দুটি এসএএইচ থাকে, আমি দ্বিতীয়টি বেছে নিয়েছিলাম, লেখকের নামের ঠিক আগে before) শেষটিটি দুর্নীতিগ্রস্থ ছিল তবে তার আগেেরটি git showএন হতে পারে এবং আমি এটির সাথে চাপ দিতে সক্ষম হয়েছি git push origin abcdef:mybranch
এড এভিস

13

উইন্ডোজ ৮.১-এ নীল পর্দার মৃত্যুর পরেও আমার একই রকম সমস্যা ছিল

আমার এই জায়গায় একটি ফাইল ছিল ...

C:\www\<project>\.git\refs\remotes\origin\<problem-branch>

এবং এটি খালি ছিল যেখানে এই ফোল্ডারের অন্যান্য শাখার ফাইলগুলির মধ্যে দীর্ঘ স্ট্রিং রয়েছে।

এনবিতে আমার কোনও পরিবর্তন / কমিট হয়নি

  • আমি ব্যাক আপ <problem-branch> ফাইলটি
  • ফাইলটি মোছা হয়েছে
  • git fetch --all আবার শাখা পেতে

তারপরে ট্যাব অটো সমাপ্তি আবার কাজ শুরু করে


6

যদি অনেকগুলি পরিবর্তিত ফাইল না থাকে তবে আমি মনে করি যে এই সমস্যাটি সমাধানের প্রত্যয়ী উপায় হ'ল:

  1. আপনি রেপোতে সংশোধিত ফাইলগুলি ব্যাকআপ করুন
  2. আপনার বিদ্যমান রেপো সরান
  3. এটি সার্ভার থেকে পুনরায় ক্লোন করুন
  4. পদক্ষেপ 1 থেকে রেপোতে পেস্ট করুন, এবং git commit -a

হ্যাঁ, কেউ পুনরায় ক্লোনিংয়ের কথা ভাবতে পারেনি। দুর্দান্ত পরামর্শ
সেলম্যান জেনেজ

5

আমি git \ refs \ হেড ডিরেক্টরিতে মাস্টার ফাইল মুছে ফেলার মাধ্যমে এটি সমাধান করতে পেরেছি


এটি সাহায্য করেছে, এটি ইন্টেলিজের তালিকা থেকে আমার শাখাটি সরিয়ে নিয়েছে এবং আমি এটি একটি নতুন শাখা হিসাবে পরীক্ষা করে দেখেছি। ভাগ্যক্রমে আমি আমার পরিবর্তনগুলিকে ঠেলে দিয়েছিলাম যাতে তারা সেখানে ছিল।
ওআম

4

একটি কম্পিউটেড নিশ্চল এবং ক্র্যাশ করার পর, আমার Git শাখা বার্তা সঙ্গে ক্ষতিগ্রস্ত হয়েছে: git fatal: your current branch appears to be broken। আমি কিছুই করতে পারলাম না।

কাজটি করার পরে git fsckযে শাখায় একটি ছিল error: Invalid HEADrefs/heads/<branch>ছিল একটি invalid sha1 pointer

এখানে বিকল্পগুলি অনুসরণ করার পরে, আমি .git/refs/heads/<branch>একটি নোটপ্যাড ++ সম্পাদক খুললাম , এবং প্রতিটি শ 1 অক্ষর ছিল NUL

ভাগ্যক্রমে আমার কেবল শাখাটি দূরবর্তী অবস্থায় পুনরায় সেট করা দরকার ছিল এবং এটি একটি বিটবাকেটের রেপোতে ছিল। আমি রিমোট রেপোর ডগা থেকে শে 1 ধরেছিলাম এবং এটি .git/refs/heads/<branch>সংরক্ষণ করে অনুলিপি করেছিলাম, তারপরে একটি করেছি git reset --hard HEADএবং সবকিছু স্বাভাবিক অবস্থায় ফিরে আসছি।


2

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

এই ফাইলে শাখায় সমস্ত কমিট (তাদের এসএইচএ সহ) রয়েছে, আমি পুনরুদ্ধার করতে যা করেছি তা হ'ল:

  • কোনও অস্থায়ী ফোল্ডারে সর্বশেষ পরিবর্তনগুলি ব্যাক আপ করুন
  • একটি "পরিষ্কার স্লেট" এ সরান
    • git checkout master
    • git reset --hard
  • লগে দ্বিতীয় প্রতিশ্রুতিবদ্ধ চেকআউট
  • এই বিচ্ছিন্ন মাথা থেকে একটি শাখা তৈরি করুন
  • পুশ
  • সর্বশেষ পরিবর্তনগুলি পুনরুদ্ধার করুন
  • আবার প্রতিশ্রুতিবদ্ধ

সুতরাং আপনি যখন কোনও বোবা ভুল করার পরেও, আপনাকে তাত্ক্ষণিকভাবে পুরো গিটারের সাথে কাজের পুরো দিনটি ফিরিয়ে নেওয়া হবে না :)


2

লক করা যায় না রেফ ত্রুটির কারণে আমি আমার মাস্টার শাখাটি চেকআউট করতে পারিনি। আমি মুছে ফেলা শেষ করেছি: .git/refs/remotes/origin/HEAD .git/refs/remotes/origin/master

এবং এই গিট কমান্ড কল:

git fetch --all

1

আমি জানি এটি খুব দেরিতে প্রতিক্রিয়া, তবে আমার কোনও ত্রুটি না থাকায় আমি এই ত্রুটিটি পাচ্ছিলাম origin/head। দৌড়ে আপনি এটি খুঁজে পেতে পারেন git branch -r। আপনি যদি origin/headকোনও দূরবর্তী উত্সের দিকে আপনার নির্দেশকটি না দেখেন তবে আপনি চালিয়ে এটি সেট করতে পারেন git remote set-head origin {{your branch name}}

এখন git branch -rআবার দৌড়াও , এবং আপনার এমন কিছু দেখা উচিত: origin/HEAD -> origin/develop

আমি আশা করি যে এটি এই সমস্যাটি নিয়ে চলে এমন অন্য যে কোনও ব্যক্তিকে সহায়তা করবে।


1

আমার কম্পিউটার দুটি বার ক্র্যাশ হয়ে গেছে এবং এর ফলস্বরূপ, আমার গিট সংগ্রহস্থল স্থানীয়ভাবে ভেঙে যায়। আমি আমার পরিবর্তনগুলি টানতে পারিনি, এটি দূরবর্তী উত্স নির্ধারণ করতে বলেছিল তবে এটি গিটক্রকেনে কাজ করে না।

আমার কমান্ড প্রম্পটে, আমি এই ত্রুটিটি পেয়েছিলাম এখানে চিত্র বর্ণনা লিখুন

আমি জানতাম যে আমার উল্লেখগুলি ভেঙে গেছে এবং এটি সংশোধন করা দরকার needs আমার যা করণীয় তা হ'ল বাশ দেওয়া (সোর্স ট্রি এ "টার্মিনালে" ক্লিক করুন)। তারপরে এই জাতীয় রেফারেন্স ফোল্ডারে নেভিগেট করুন

cd .git
cd refs
cd remotes
cd origin

সেখানে একটি ফাইলের নাম masterথাকবে, lsডিরেক্টরিতে কী আছে তা দেখতে ব্যবহার করুন । তারপরে এটি আরএম মাস্টার ব্যবহার করে মুছুন

বাম, দূষিত ফাইলটি চলে গেছে। এখন আপনি গিট শাখা কমান্ড -a জারি করলে এটি আউটপুট দেয়

$ git branch -a
* master
  remotes/origin/master (this in red color -scary :) )

তারপরে এই আদেশটি জারি করুন এবং এটি আপনার রেফারেন্সগুলি ঠিক করবে

$ git remote set-head origin master

সংক্ষেপে, আপনি যদি রিমোটটি টানতে চেষ্টা করেন তবে এটি ফাঁকা দূরবর্তী নামটি দেখা উচিত যা ঠিক করা হয়েছে which

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


0

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


0

এমএসউইনডোজগুলি ডেস্কটপ.আইএনআই ফাইল তৈরি করেছে কিনা তা পরীক্ষা করে দেখুন? এটা আমার জন্য। আমি একবার সেগুলিকে .git ডিরেক্টরিটির সাবফোল্ডারগুলিতে মুছে ফেললে তা কার্যকর হয়।


0

হঠাৎ করেই (কম্পিউটারে পাওয়ার ক্ষতির কারণে) অ্যান্ড্রয়েড স্টুডিওটি বন্ধ হয়ে গেলে আমার একই সমস্যা হয়েছিল।

আমার বিষয়বস্তু অনুলিপি করে সমাধান করেছি C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\heads\master ফাইলের ফাইলেC:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\remotes\origin\master

(এর আগে, আমি অ্যান্ড্রয়েড স্টুডিওতে 'ফোর্স পুশ' বিকল্পটি চালু করে দিয়েছিলাম, তবে এটি আমার পক্ষে প্রয়োজনীয় পদক্ষেপ বলে মনে হয় না))

বিঃদ্রঃ:

আমি আমার C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\ডিরেক্টরিতে থাকা ফাইলগুলির বিষয়বস্তুর (ইনক। উপ-ডিরেক্টরিগুলি) অন্য স্বাস্থ্যকর ব্যক্তিদের সম্পর্কিত ফাইলগুলির সাথে তুলনা করে এই সমাধানটি পেয়েছি প্রকল্পের - যেমন C:\Users\myusername\AndroidStudioProjects\MyHealthyApp\.git\,।

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

যদি আপনার কাছে আরও একটি স্বাস্থ্যকর প্রকল্প নেই যা গিটটি কনফিগার করেছে, তবে আপনি নিজের ভাঙা প্রকল্পটি যেভাবে তৈরি করেছেন তেমনি তদন্ত, তুলনা এবং সংশোধন করতে পারে ইত্যাদি একইসাথে একটি সহজ প্রকল্প তৈরি করা উপযুক্ত may

PS - আমার ত্রুটির বার্তা (সম্পাদিত) ছিল: warning: ignoring broken refs/remotes/origin/master.fatal bad revision 'refs/remotes/origin/master..refs/heads/master' during executing git -c core.quotepath=false log refs/remotes/origin/master..refs/heads/master --pretty=format --encoding=UTF-8 -M --name-status -c --


0

আমি যদি কারও পরে পুনরাবৃত্তি করি তবে আমাকে ক্ষমা করুন (আমি সমস্ত প্রতিক্রিয়া পড়িনি)। আমার মতে, সমস্যাটি সমাধানের সহজতম উপায় হ'ল প্রকল্পটি .git এবং .idea ছাড়াই অনুলিপি করা, এটি পরিষ্কার করা, গিট থেকে ক্লোন করা, উপরের ডিরেক্টরিগুলি বাদ দিয়ে সমস্ত কিছু মুছে ফেলা এবং তারপরে .git এবং .idea দিয়ে নতুন তৈরি রেপোতে পূর্ববর্তী অনুলিপিটি আটকানো to । আশা করি তা বোধগম্য হবে।

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