গিট, কীভাবে কোনও প্রতিশ্রুতিতে উত্স / মাস্টার পুনরায় সেট করবেন?


245

আমি আমার স্থানীয় মাস্টারকে এই আদেশ দ্বারা একটি প্রতিশ্রুতিতে পুনরায় সেট করেছি:

git reset --hard e3f1e37

আমি যখন $ git statusকমান্ড প্রবেশ করি , টার্মিনাল বলে:

# On branch master
# Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.

#   (use "git pull" to update your local branch)
#
nothing to commit, working directory clean

যেহেতু আমি পাশাপাশি উত্স / শিরোনামটি পুনরায় সেট করতে চাই তাই আমি উত্স / মাস্টারে চেকআউট করছি:

$ git checkout origin/master
Note: checking out 'origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 2aef1de... master problem fixed for master. its okay now.

এবং এই আদেশ দ্বারা শিরোনামটি পুনরায় সেট করুন:

$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.

তারপরে আমি উত্স / শিরোনামে প্রতিশ্রুতি যুক্ত করার চেষ্টা করেছি যে আমি সফল হই নি।

$ git commit -m "Reverting to the state of the project at e3f1e37"
# HEAD detached from origin/master
nothing to commit, working directory clean

অবশেষে, আমি আমার স্থানীয় মাস্টারকে চেকআউট করি।

$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

যেহেতু, আমি উত্স / প্রধানের মাথাটি পুনরায় সেট করেছি আমি প্রত্যাশা করি স্থানীয় এবং উত্স একই দিকের হওয়া উচিত তবে আপনি যেমন দেখছেন, গিট বলছে যে আমার স্থানীয় / মাস্টার মূল / মাস্টার পিছনে 7 টি কমিট করে।

আমি কীভাবে এই সমস্যাটি সমাধান করতে পারি? আমি যে জিনিসগুলি সন্ধান করছি তা হ'ল স্থানীয় / প্রধান এবং উত্স / মাস্টার পয়েন্ট একই প্রতিশ্রুতিবদ্ধ। নিম্নলিখিত চিত্রটি আমি যা করেছি তা দেখায়। ধন্যবাদ।

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


প্রথমত, নিশ্চিত করুন যে আপনার প্রকল্পের সুরক্ষিত শাখায় আপনাকে পুশ কোড জোর করার অনুমতি দেওয়া হয়েছে, অন্যথায় আপনি সক্ষম হবেন না ...
ডারমভিলেগাস

উত্তর:


563

origin/xxxশাখাগুলি সর্বদা একটি দূরবর্তীকে নির্দেশ করে ter আপনার স্থানীয় সংগ্রহস্থলের দিকে নির্দেশক না হওয়ায় আপনি এগুলি পরীক্ষা করতে পারবেন না (আপনি কেবল প্রতিশ্রুতিটি পরীক্ষা করে দেখুন That's এজন্য আপনি কমান্ড লাইন ইন্টারফেসের শাখায় চিহ্নিত নামটি দেখতে পাবেন না, কেবল কমিট হ্যাশ)।

রিমোট আপডেট করার জন্য আপনার যা করা দরকার তা হ'ল আপনার স্থানীয় পরিবর্তনগুলিকে মাস্টারে চাপানো:

git checkout master
git reset --hard e3f1e37
git push --force origin master
# Then to prove it (it won't print any diff)
git diff master..origin/master

9
এটি অনুরোধ করা অপারেশনটি করে, তবে মনে রাখবেন যে এটি সেই ব্যক্তিদের দ্বারা অসন্তুষ্ট হবে যারা ইতিমধ্যে মাস্টার থেকে চুক্তিগুলি টেনে নিয়েছিল।
mnagel

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

1
আপনার উত্স / মাথা সম্পর্কে যত্ন নেওয়া উচিত নয়, কেবল ভাল
রেফকে

রাজি হয়েছি, ভুলভাবে একসাথে ভুল শাখাগুলি একত্রিত করার পরে উত্সের দিকে ঠেলে দেওয়ার পরে আজকে এটি করতে হয়েছিল। এটি ভালভাবে কাজ করে, তবে অন্য লোকেরা যদি আক্রান্ত শাখাগুলি উত্স থেকে পরীক্ষা করে দেখছিলেন তবে এটি খুব বিঘ্নজনক হতে পারে । সতর্কতার সাথে ব্যবহার করুন.
নিক ডব্লু।

1
কাজ করে না। remote: error: denying non-fast-forward refs/heads/master (you should pull first)
m0skit0

52

সমাধান পাওয়া এখানে করার জন্য একটি পূর্ববর্তী ইতিমধ্যে ধাক্কা হয়েছে কমিট আপডেট মাস্টার করতে সাহায্য করেছিল:

git checkout master
git reset --hard e3f1e37
git push --force origin e3f1e37:master

গৃহীত উত্তর থেকে মূল পার্থক্য হ'ল কমিট হ্যাশ "e3f1e37:" পুশ কমান্ডের মাস্টারের আগে।


1
কাজ করে না:remote: error: denying non-fast-forward refs/heads/master (you should pull first)
m0skit0

@ m0skit0 বার্তাটি বলেছেন এর হিসাবে you should pull first:)
স্বজ্ঞাত

এর উত্তরটি স্ট্যাকওভারফ্লো . com / a / 10544328 / 1019307 এ রয়েছে - git config receive.denynonfastforwards falseতবে আসলে আমি নিজের স্থানীয় গিট সংগ্রহস্থলটিতে ম্যানুয়ালি সেট করেছি /opt/gitযা আমি এখানে ধারণাগুলির সাথে খেলতে তৈরি করেছি। আমি কীভাবে বা কীভাবে বিটবাকেট, গিথুব ইত্যাদির জন্য এটি করতে পারি তা নিশ্চিত নই ... এবং @ সিন্টুটিভপিক্সেল যা অর্থ রিসেট দিয়ে আপনি কী অর্জন করার চেষ্টা করছেন তার বিপরীত হিসাবে এটি অর্থহীন।
হ্যাঙ্ককা

হাই @ জকোভাকস, আমি চাই না যে মাস্টারের নতুন পরিবর্তনগুলি সরানো হোক। আমি কেবলমাত্র সেই প্রতিশ্রুতিবদ্ধ হ্যাশ "e3f1e37" টি উত্সের উপর চাপ দিতে চাই 2 য় কমান্ড গিট রিসেট - "" e3f1e37 "এড়িয়ে কি সম্ভব?
ক্যারেনআনে

হাই @ জকোভাকস, আমি কেবল নিশ্চিত করেছি যে আমি ২ য় পদক্ষেপ এড়াতে পারি। :)
কারেনআনে

2

ধরে নিই যে আপনার শাখাটিকে masterএখানে এবং দূরবর্তীভাবে উভয়ই বলা হয় এবং আপনার রিমোটকে বলা originযেতে পারে আপনি এটি করতে পারেন:

git reset --hard <commit-hash>
git push -f origin master

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


1

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

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

এক গভীর রাতে, হার্ডওয়্যার ব্যর্থতা বা ইথারের বাইরে কোনও কিছুতে আমার অগ্রগতি হ্রাস করার ভৌতিক ভয়ে, আমি মাস্টারকে উত্সের দিকে ঠেলে দেওয়ার সিদ্ধান্ত নিয়েছি। পরে আমি আমার স্থানীয় মাস্টার শাখাটি সংশোধন করে চলেছি এবং যখন আমি সিদ্ধান্ত নিয়েছি যে এটি আবার চাপ দেওয়ার সময়, তখন আমি বিভিন্ন মাস্টার শাখার মুখোমুখি হয়েছিলাম এবং জানতে পেরেছিলাম যে আমি উত্স / উজানের সংশোধন করতে পারি না ( দুহ! যে আমি স্থানীয় উন্নয়ন শাখাগুলি করতে ) ।

সুতরাং আমি স্থানীয়ভাবে মাস্টার চেকআউট করিনি কারণ আমি ইতিমধ্যে প্রতিশ্রুতিবদ্ধ হয়েছি after মাস্টার অপরিবর্তিত ছিল। এমনকি আমার পুনরায় সেট করার দরকার নেই - আমার বর্তমান প্রতিশ্রুতি ঠিক ছিল।

আমি কেবল উত্সাহিত করতে বাধ্য হয়েছি, এমনকি মাস্টারের উপর আমি কী প্রতিশ্রুতিবদ্ধ হতে বাধ্য করেছি তা নির্দিষ্ট না করেই যেহেতু এই ক্ষেত্রে এটি যেদিকেই শিরোনাম। পরীক্ষা করা হয়েছে git diff master..origin/masterযাতে কোনও পার্থক্য ছিল না এবং এটিই। সব ঠিক আছে। ধন্যবাদ! (আমি জানি, আমি গিট নবাগত, দয়া করে ক্ষমা করুন!)।

সুতরাং আপনি যদি স্থানীয়ভাবে নিজের মাস্টার শাখার সাথে ইতিমধ্যে ঠিক থাকেন তবে ঠিক:

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