প্রথমে নীচের কমান্ডগুলি ব্যবহার করে দেখুন (প্রয়োজনে পুনরায় চালনা করুন):
$ git fsck --full
$ git gc
$ git gc --prune=today
$ git fetch --all
$ git pull --rebase
এবং তারপরেও আপনার এখনও সমস্যা রয়েছে, চেষ্টা করুন:
সমস্ত দূষিত বস্তু মুছে ফেলুন, যেমন
fatal: loose object 91c5...51e5 (stored in .git/objects/06/91c5...51e5) is corrupt
$ rm -v .git/objects/06/91c5...51e5
সমস্ত খালি বস্তু মুছে ফেলুন, যেমন
error: object file .git/objects/06/91c5...51e5 is empty
$ find .git/objects/ -size 0 -exec rm -vf "{}" \;
একটি "ভাঙা লিঙ্ক" বার্তাটি পরীক্ষা করে দেখুন:
git ls-tree 2d9263c6d23595e7cb2a21e5ebbb53655278dff8
এটি আপনাকে বলবে যে দুর্নীতিগ্রস্থ ব্লবটি কোন ফাইল থেকে এসেছে!
ফাইলটি পুনরুদ্ধার করতে, আপনি সত্যিই ভাগ্যবান হতে পারেন, এবং এটি এমন সংস্করণ হতে পারে যা আপনি ইতিমধ্যে আপনার কার্যক্ষম গাছটিতে যাচাই করেছেন:
git hash-object -w my-magic-file
আবার, এবং যদি এটি হারিয়ে যাওয়া SHA1 (4b945 ..) কে আউটপুট করে দেয় আপনি এখন সব শেষ করেছেন!
ধরে নিই যে এটি কিছু পুরানো সংস্করণটি ভেঙে গেছে, এটি করার সহজতম উপায় হ'ল:
git log --raw --all --full-history -- subdirectory/my-magic-file
এবং এটি আপনাকে সেই ফাইলটির পুরো লগটি দেখিয়ে দেবে (দয়া করে বুঝতে পারেন যে আপনার যে গাছটি ছিল এটি উচ্চ স্তরের গাছ নাও হতে পারে, তাই এটি নিজেই কোন উপ-ডিরেক্টরিতে রয়েছে তা নির্ধারণ করার দরকার আছে), তবে আপনি এখন পুনরায় তৈরি করতে পারবেন হ্যাশ-অবজেক্টের সাথে আবার অজানা অবজেক্ট।
নিখোঁজ কমিট, গাছ বা ব্লব সহ সমস্ত রেফার তালিকা পেতে:
$ git for-each-ref --format='%(refname)' | while read ref; do git rev-list --objects $ref >/dev/null || echo "in $ref"; done
নিয়মিত ব্রাঞ্চ-ডি বা ট্যাগ-ডি কমান্ড ব্যবহার করে সেই কয়েকটি রেফ অপসারণ করা সম্ভব হবে না, কারণ যদি গিট দুর্নীতির বিষয়টি লক্ষ্য করে তবে তারা মারা যাবে। সুতরাং পরিবর্তে নদীর গভীরতানির্ণয় কমান্ড গিট আপডেট-রেফ-ডি-রেফ ব্যবহার করুন। মনে রাখবেন যে স্থানীয় শাখাগুলির ক্ষেত্রে, এই কমান্ডটি বাসী শাখা কনফিগারেশনটি .git / কনফিগারেশনে রেখে দিতে পারে। এটি ম্যানুয়ালি মুছে ফেলা যায় ([শাখা "রেফ" "বিভাগ দেখুন)।
সমস্ত রেফ পরিষ্কার হওয়ার পরে, রিফলগে এখনও ভাঙ্গা কমিট থাকতে পারে। আপনি গিট রিফ্লগের মেয়াদ - এক্সপায়ার = এখন - সমস্ত ব্যবহার করে সমস্ত রিফ্লোগগুলি সাফ করতে পারেন। আপনি যদি আপনার সমস্ত রিপ্লাগগুলি হারাতে না চান, আপনি ভাঙা রিফ্লোগগুলির জন্য পৃথক রেফগুলি অনুসন্ধান করতে পারেন:
$ (echo HEAD; git for-each-ref --format='%(refname)') | while read ref; do git rev-list -g --objects $ref >/dev/null || echo "in $ref"; done
(রেভ-লিস্টে গিট করার জন্য অ্যাড করা -g বিকল্পটি নোট করুন)) তারপরে, গিট রিফ্লগের মেয়াদ শেষ হয়ে যাওয়া --expire = এখন $ প্রতিটির উপর রেফ ব্যবহার করুন। সমস্ত ভাঙ্গা রেফ এবং রেফ্লোগগুলি শেষ হয়ে গেলে, সংগ্রহস্থলটি পরিষ্কার কিনা তা পরীক্ষা করতে গিট fsck - সম্পূর্ণ চালান। জঞ্জাল বস্তু ঠিক আছে।
নীচে আপনি কমান্ডগুলির উন্নত ব্যবহার সন্ধান করতে পারেন যা আপনার গিট রিপোজিটরিতে আপনার ডেটা হারিয়ে যাওয়ার কারণ হতে পারে যদি বুদ্ধিমানের সাথে ব্যবহার না করা হয়, সুতরাং আপনি দুর্ঘটনাক্রমে আপনার গিটের আরও ক্ষতি করার আগে একটি ব্যাকআপ তৈরি করুন। আপনি কী করছেন তা যদি আপনার নিজের ঝুঁকির চেষ্টা করে দেখুন।
আনার পরে উজানের শাখার শীর্ষে বর্তমান শাখাটি টানতে:
$ git pull --rebase
আপনি নতুন শাখাটি চেকআউট করে পুরানোটি মুছতে চেষ্টা করতে পারেন:
$ git checkout -b new_master origin/master
গিটে অপসারণের জন্য দূষিত বস্তুটি খুঁজে পেতে, নিম্নলিখিত আদেশটি চেষ্টা করুন:
while [ true ]; do f=`git fsck --full 2>&1|awk '{print $3}'|sed -r 's/(^..)(.*)/objects\/\1\/\2/'`; if [ ! -f "$f" ]; then break; fi; echo delete $f; rm -f "$f"; done
ওএসএক্সের sed -E
পরিবর্তে ব্যবহার করুন sed -r
।
অন্য ধারণা হ'ল প্যাকেট ফাইল থেকে সমস্ত বস্তুগুলি .git / অবজেক্টের অভ্যন্তরে পুনরায় জন্মানোর জন্য আনপ্যাক করা হয়, তাই আপনার সংগ্রহস্থলের মধ্যে নিম্নলিখিত কমান্ডগুলি চালনার চেষ্টা করুন:
$ cp -fr .git/objects/pack .git/objects/pack.bak
$ for i in .git/objects/pack.bak/*.pack; do git unpack-objects -r < $i; done
$ rm -frv .git/objects/pack.bak
উপরেরটি যদি সহায়তা না করে তবে আপনি অন্য রেপো থেকে গিটার অবজেক্টগুলি আরএসসিএন করতে বা অনুলিপি করার চেষ্টা করতে পারেন, যেমন
$ rsync -varu git_server:/path/to/git/.git local_git_repo/
$ rsync -varu /local/path/to/other-working/git/.git local_git_repo/
$ cp -frv ../other_repo/.git/objects .git/objects
নীচে চেকআউট করার চেষ্টা করার সময় ভাঙা শাখাটি ঠিক করতে:
$ git checkout -f master
fatal: unable to read tree 5ace24d474a9535ddd5e6a6c6a1ef480aecf2625
এটি সরানোর চেষ্টা করুন এবং আবার উজান থেকে চেকআউট করুন:
$ git branch -D master
$ git checkout -b master github/master
যদি গিট আপনাকে বিচ্ছিন্ন অবস্থায় master
নিয়ে যায় তবে চেকআউট করুন এবং এতে বিচ্ছিন্ন শাখায় মার্জ করুন।
আরেকটি ধারণা হ'ল বিদ্যমান মাস্টারকে পুনরাবৃত্তিভাবে পুনঃনির্মাণ করা:
$ git reset HEAD --hard
$ git rebase -s recursive -X theirs origin/master
আরো দেখুন:
.git
অবশ্যই ফোল্ডার বাদে ) সমস্ত ফাইলের সতেজ ক্লোন করা রেপিতে অনুলিপি করুন ... এবং তারপরেgit status
নতুন রেপোতে ... গিটটি আমার ফাইলগুলিতে সমস্ত প্রভাবিত পরিবর্তনগুলি সঠিকভাবে সনাক্ত করে এবং আমি আবার আমার কাজ শুরু করতে পারি।