একটি রিমোট গিট সংগ্রহস্থল পিছনে ঘূর্ণায়মান


111

আমার কাছে একটি রিমোট গিট সংগ্রহশালা রয়েছে এবং আমার শেষ nপ্রতিশ্রুতিগুলি শীতল বিসর্জনে ফিরে যেতে হবে ।

উত্তর:


135

আপনি git revert <commit>…সমস্ত এন কমিটের জন্য ব্যবহার করতে পারেন এবং তারপরে ইতিহাসটি অপরিবর্তিত রেখে যথারীতি চাপ দিন।

অথবা আপনি এর সাথে "রোল ব্যাক" করতে পারেন git reset --hard HEAD~n। আপনি যদি সর্বজনীন বা ভাগ করা ভাণ্ডারগুলিতে চাপ দিচ্ছেন তবে আপনি আপনার মূল শাখার উপর ভিত্তি করে অন্যদের কাজ সরিয়ে নিয়ে যেতে পারেন। গিট আপনাকে এটি করতে বাধা দেবে, তবে আপনি git push -fআপডেটটি জোর করতে ব্যবহার করতে পারেন ।


5
আপনি ব্যবহার করে একটি নির্দিষ্ট প্রতিশ্রুতিতে রোলব্যাক করতে পারেন: git reset --hard [sha1]যেখানে sha1 হল কমিটের হ্যাশ সনাক্তকারী।
পিসারুক

7
কোনও কার্যনির্বাহী ডিরেক্টরি না থাকায় আপনি রিসেট --হার্ড রিমোট রিপোজিটরিতে ব্যবহার করতে পারবেন না। মূল প্রশ্নটিতে কেবল একটি রিমোট রেপো রয়েছে, স্থানীয় রেপোর কোনও উল্লেখ নেই।
হাজোক

2
কেবল একটি নোট, গিট পুশ
এফ

দয়া করে মনে রাখবেন, revertএটির ফলে আপনার বৈশিষ্ট্য শাখাগুলি "ইতিমধ্যে" একীভূত হিসাবে বিবেচিত হবে। এটা এ কারণে যে এই শাখা এর হয় আসলে একীভূত হচ্ছে। তবে পরিবর্তনগুলি উল্টে গেছে। সমাধান: চেরি-পিক বা রিভার্ট কমিটকে ফিরিয়ে দিন
বেনিডিক্ট

@ বেনডিক্ট কি reset --hardবৈশিষ্ট্যযুক্ত শাখাগুলিকে ইতিমধ্যে মার্জ করা হিসাবে বিবেচনা করবে? আমার ধারণা এটি না হয় (যেখানে revertহবে)।
মার্কাস লিওন

37

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

git push origin old_master:master

অথবা, যদি কোনও নির্দিষ্ট কমিট SHA1 থাকে (সংক্ষিপ্ত আকারে 1e4f99e বলুন) আপনি এখানে ফিরে যেতে চাই:

git push origin 1e4f99e:master

9

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

error: failed to push some refs to 'ssh://git@gitrepo.git'
To prevent you from losing history, non-fast-forward updates were rejected*

তবে ফোর্স ( -f) বিকল্প যুক্ত করে এই ত্রুটিটি ওভাররাইট করে

git push -f origin 52e36b294e:master

3

আপনার যদি প্রত্যন্ত রেপোতে সরাসরি অ্যাক্সেস থাকে তবে আপনি সর্বদা ব্যবহার করতে পারেন:

git reset --soft <sha1>

অস্তিত্বহীন কার্যকারী ডিরেক্টরিটি সংশোধন করার কোনও প্রচেষ্টা না হওয়ায় এটি কাজ করে। আরও তথ্যের জন্য দয়া করে আসল উত্তরটি দেখুন:

গিট বেয়ার স্টোরের মধ্যে আমি শেষ প্রতিশ্রুতিটি কীভাবে প্রকাশ করতে পারি?


2
কেন --softএমনকি প্রয়োজন হবে? আপনি সম্ভবত git resetমোড ফ্ল্যাগ ছাড়াই কেবল সাধারণ প্লেইন দিয়ে একই জিনিসটি করতে পারেন ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.