রিমোট সংগ্রহস্থলের পুনরায় সেট করার জন্য কীভাবে বাধ্য করবেন?


96

আমাদের রিমোট মাস্টার শাখাটি কোনওভাবে গণ্ডগোল পেয়েছে। বর্তমান বিকাশ কোডটি সর্বশেষ কমিটির পাশাপাশি মাস্টার শাখায় রয়েছে। স্পষ্টতই, উন্নয়ন কোড মাস্টার শাখার জন্য প্রস্তুত নয়।

সুতরাং আমার স্থানীয় সংগ্রহস্থলগুলিতে, আমি সর্বশেষ ট্যাগটিতে রিসেট করেছি git reset --hard (Tag),। মাস্টার শাখাটি এখন আমার স্থানীয় সংগ্রহস্থলে সঠিক। এখন যখন আমি পরিবর্তনগুলি দূরবর্তী সংগ্রহস্থলের দিকে ঠেলে দেওয়ার চেষ্টা করি, তখন আমি git push origin masterএকটি ত্রুটি পেয়েছি:

To (REMOTE GIT REPOSITORY LOCATION)
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

তাই আশেপাশে দেখার পরে আমি --forceবিকল্পটি খুঁজে পেয়েছি । তাই আমি দূরবর্তী সংগ্রহস্থলের দিকে জোর চাপিয়ে git push --force origin masterদিয়েছি এবং তবুও আমি একটি ত্রুটি পেয়েছি:

Total 0 (delta 0), reused 0 (delta 0)
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To (REMOTE GIT REPOSITORY LOCATION)
 ! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'

আমি মাস্টার টানতে পারি না, কারণ এটিতে ডেভলপমেন্ট কোড রয়েছে যা মাস্টারে থাকতে পারে না।


4
আমি মনে করি বার্তাটির অর্থ হল আপনার কাছে দ্রুত-অগ্রাহীকরণের ধাক্কা দেওয়ার অধিকার নেই।
সোভিক

4
আপনি সঠিক ছিলেন, ধন্যবাদ। রিমোটারে রিপোজিটরির জন্য কনফিগার ফাইলে denyNonFastforwards = true,। আমি এটিকে মিথ্যাতে পরিবর্তন করেছি, আমার পরিবর্তনগুলিকে ঠেলে দিয়ে আবার সত্যে ফিরে এসেছি। সাহায্যের জন্য আবার সবাইকে ধন্যবাদ।
samwell

4
@ সামওল দয়া করে স্বিকের উত্তরকে স্বীকৃত হিসাবে চিহ্নিত করুন
hultqvist

@ সামওয়েল আপনার পক্ষে কাজ করেছেন না সিকওয়েল?
সানগো

যাঁরা কীভাবে অস্বীকার করবেন নিষ্ক্রিয় করতে চান তার জন্য বিশদ ফটোগুলি যেমন সামওলের মতো, আরও নির্দেশাবলী এখানে পাওয়া যাবে:
stackoverflow.com/a/43721579/2073804

উত্তর:


154

বার্তাটির অর্থ হ'ল আপনাকে দ্রুত-অগ্রসর ধাক্কা দেওয়ার অনুমতি নেই।

আপনার দূরবর্তী সংগ্রহস্থলের সম্ভবত denyNonFastforwards = trueএটির কনফিগারেশনে রয়েছে। যদি আপনি এটি পরিবর্তন করেন, git push --forceকাজ করা উচিত।

সেটিংটি পরিবর্তন করতে আপনার দূরবর্তী সংগ্রহস্থল সহ মেশিনে অ্যাক্সেস দরকার। সেখান থেকে, করুন git config receive.denynonfastforwards false


4
আপনি git configএকটি সার্ভারের জন্য একটি করতে পারেন ? অথবা সম্ভবত আপনি সেই রূপকটি ব্যবহার করছেন। এই ধারণাগুলি নিয়ে খেলতে আমি একটি পরীক্ষার রেপো তৈরি করেছি /opt/git(আমার গিট সার্ভার স্পেস) এবং তারপরে আমি এই সেটিংটি মধ্যে পরিবর্তন করেছি /opt/git/the_repo/the_repo.git/config। তবে একবার git push --force origin SHA:branchপ্রয়োজনীয় হিসাবে কাজ শেষ ।
হ্যাঙ্ককা

4
ত্রুটি বার্তায় একটি লাইন থাকবে যা "ত্রুটি দিয়ে শুরু হবে: << আপনার সংগ্রহস্থল>" এ কিছু রেফ চাপতে ব্যর্থ যেখানে <আপনার সংগ্রহশালা> .git এ শেষ হবে যা "কনফিগারেশন" নামে একটি ফাইলযুক্ত ডিরেক্টরি রয়েছে। এই "কনফিগ" ফাইল যেখানে আপনি denyNonFastforwards = মিথ্যা সেট করতে পারেন
Emery

4
@ এমেরির মন্তব্য মূল্যবান। কখনও কখনও সার্ভারের ফোল্ডারে এর উত্সটি /srv/git/repo.git জাতীয় কিছুতে সেট হয়ে থাকে। এটি এমন কনফিগারেশন যা অ্যাপলিকেশন ফোল্ডারটি নয়, ননফাস্ট ফরওয়ার্ডস সেট সেট করেছে।
এলিজা লিন

4
@ আহসালিমি যদি আপনার সার্ভারে অ্যাক্সেস না থাকে তবে আপনাকে সার্ভার প্রশাসকের সাথে যোগাযোগ করতে হবে এবং অস্থায়ীভাবে এটিকে বন্ধ করতে হবে যাতে আপনি চাপ দিতে বাধ্য হন এবং তারপরে এটিকে আবার চালু করতে পারেন। যদিও এটি করার সম্ভাবনা সবচেয়ে বেশি। এটি আপনার নিজস্ব হোস্টিং দলের সাথে অভ্যন্তরীণ পরিবেশে বেশি সাধারণ হতে পারে।
এলিজা লিন

4
এটি প্রাথমিকভাবে হতাশাব্যঞ্জক, তবে এর সৌন্দর্য হ'ল দূরবর্তীটি সম্পূর্ণরূপে ডিফল্টরূপে সুরক্ষিত থাকে এবং আপনি যদি বিকাশকারী হিসাবে ইচ্ছাকৃতভাবে এবং সঠিকভাবে পুনর্বাসনা করেন তবে আপনি বিপজ্জনক আচরণের অনুমতি দিতে এই কনফিগারেশনটিকে ওভাররাইড করতে পারেন। রিবাজিং এমন এক জিনিস যা প্রতিটি গিট ব্যবহারকারীকে কীভাবে করা উচিত - এবং কখন করবেন না তা জানতে হবে। ডক
মুডবুম

15

রিমোটটি নন-ফাস্ট-ফরওয়ার্ডগুলিকে অনুমতি দেয় না।

আপনার সেরা বিকল্পটি সেই git revertসমস্ত কমিটের কাছে রয়েছে যা সেখানে না হওয়া উচিত এবং ভবিষ্যতে আরও সতর্ক হওয়া উচিত।

git revert [commit]একটি নতুন প্রতিশ্রুতি তৈরি করবে যা পূর্বেই যাই হোক [commit]না কেন ।


এটি দূরবর্তী সংগ্রহস্থলের কিছু সেটিংস যা সমস্ত অ-ফাস্ট-ফরোয়ার্ড পরিবর্তনগুলি অবরুদ্ধ করে।
samwell

আপনি যদি এটি করেন এবং পুনরায় প্রয়োগ করার দরকার পড়ে ইতিহাসটি কোনও পরিবর্তনকে
ঘুরিয়ে

12

-fপতাকাটি ব্যবহার করে এটি দূরবর্তী শাখার নাম পরে রাখার চেষ্টা করুন ।

git push origin master -f


4
নাহ, এটিও কাজ করে না। আমি চেষ্টা করেছিলাম git push -f origin masterএবং একই ফলাফল। দু'বার চেষ্টা করেও আমি ত্রুটি বার্তার দ্বিতীয় সংস্করণ পেয়েছি।
স্যামওয়েল

12

নিম্নলিখিত শৈলীতে স্থায়ীভাবে বলপূণ সক্ষম করার পদক্ষেপগুলি

git push -f myrepo my-branch

আপনার দূরবর্তী সংগ্রহস্থলের ".git" ফোল্ডারে শেষ হওয়া "কনফিগারেশন" নামের ফাইলটি সম্পাদনা করুন

ব্যর্থ পুশ থেকে গিটের কমান্ড-লাইন আউটপুটে, লাইনটি দেখুন যা এই জাতীয় কিছু বলে:

error: failed to push some refs to 'ssh://user@some-remote-server.mycompany.com/srv/git/myrepo.git

তারপর

ssh user@some-remote-server.mycompany.com
cd /srv/git/myrepo.git
vi config

"অস্বীকার করুন" অস্বীকার করুন

"কনফিগারেশন" এ, সেট করুন

[receive]
        denyNonFastforwards = false

এখন আপনি আপনার স্থানীয় মেশিন থেকে -f দিয়ে চাপ দিতে পারেন

git push -f myrepo my-branch

খালি গিট রেপোতে এসএসএইচ ছাড়াই এটি কীভাবে করবেন?
ভ্লাদিমির ভুকানাক

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

git revertআপনি একত্রিত হয়ে গেলে একধরনের জটিল is আরও জটিল হওয়ার জন্য আমার ক্ষেত্রে 3 টি মার্জ রয়েছে, যার মধ্যে একটি খুব পুরানো ~ 20 কমিটের সাথে বিকাশ থেকে বিচ্যুত হয়, ২ য় মাস্টার থেকে একীভূত হওয়া - নরক হিসাবে কুৎসিত।
ভ্লাদিমির ভুকানাক

4
হতে পারে সমাধানটি হ'ল পছন্দসই স্থিতিতে পুনরায় সেট করা, ব্যাকআপ (স্ট্যাশ), আবার টানুন এবং ব্যাকআপ প্রয়োগ করা (স্ট্যাশ)।
ভ্লাদিমির ভুকানাক

4
mrW আপনি এখনও কোড বেস আপনি একটি প্রত্যাবর্তন / টানা কোড বেস উপরে চান মার্জ করতে পারবেন
Emery

2

আপনাকে গিট পুশ করার অনুমতি দেওয়া হয় না যা দ্রুত এগিয়ে যায় না।

  1. রিমোটটি যদি গিটহাব https://github.com/$USER/$REPO/settings/branchesহয় তবে প্রশ্নটিতে শাখাটি আন-সুরক্ষিত করুন।

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

    এটি করতে আপনাকে রেপোর প্রশাসক হতে হবে।

  2. রিমোটটি যদি আপনার নিজের গিট সার্ভার হয় তবে git config receive.denynonfastforwards falseসেখানে চালান ।


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


0

সমস্যাটি দেখা দেয় কারণ বর্তমান শাখাটি পুলের জন্য সঠিকভাবে কনফিগার করা হয়নি । প্রথমে আপস্ট্রিম শাখাটি টানটির জন্য - ব্যবহার করে সঠিকভাবে কনফিগার করা হয়েছে কিনা তা পরীক্ষা করে দেখুন git remote show origin। আপনি এটা ধারার অধীন জানতে পারেন - 'Git টান' এর জন্য কনফিগার করা স্থানীয় শাখা: । যদি তা না হয় তবে এটি ব্যবহার করে কনফিগার করুন:

git config branch.MYBRANCH.merge refs/heads/MYBRANCH

স্থানধারকের জন্য উপযুক্ত শাখার নাম দিন - মাইব্র্যাঞ্চ CH


0

আমি আমার রিমোট রেপো পুনরায় সেট করতে এই গ্রুপের কমান্ড ব্যবহার করছি, এটি আপনার স্থানীয় রেপোটিকে পুনরায় আরম্ভ করবে এবং আপনার দূরবর্তী রেপোর সাথে পুনরায় সংযোগ দেবে তখন আপডেটগুলিকে চাপ দিন push

আমি মনে করি এইভাবে আপনার ক্ষেত্রে কাজ করবে না, তবে অন্য কারও পক্ষে এটি কার্যকর হতে পারে

সোর্স ফোল্ডারে যান তারপরে কমান্ডগুলি চালান: নোটটি এটি https://github.com/*.gitআপনার দূরবর্তী রেপো লিঙ্ক

git init
git remote add origin https://github.com/*.git
git add .
git commit -m "initial commit"
git push origin master -f
git push --set-upstream origin master

**Note: this will clear all your git history on your master branch**


0

আমার জন্য, @ স্পিকারের ইঙ্গিতটি সঠিক দিকে নির্দেশ করেছে। যে গিট সার্ভারটি আমি সংশোধন করতে চেয়েছিলাম তা আসলে আমার বাক্স, তাই আমি এটিতে লগইন করেছি এবং git config --global receive.denynonfastforwards falseজোরপূর্বক নন-এফএফ পুশটি গ্রহণ করার জন্য সমস্ত রেপো পরিবর্তন করার চেষ্টা করেছি। বাক্সের বাইরে কাজ হয়নি। আমি যেটি খুঁজে পেয়েছি তা হ'ল কনফিগারেশনে ইতিমধ্যে receive.denynonfastforwards=trueসেট করা ছিল এবং এটি মুছে ফেলা যায় না git config --global --unset receive.denynonfastforwardsvi configযদিও রেপোতে সম্পাদনাটি ম্যানুয়ালি করে ( ) কাজ করেছে।


0

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

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