git - কিভাবে আমি সঠিকভাবে একটি গিট ধাক্কা বলব?




push git-push (5)

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

এখন, আমাকে দূরবর্তী রেপোতে কিছু পরিবর্তন করতে হয়েছিল। তারপর আমি আমার স্থানীয় repo কিছু পরিবর্তন। আমি রিমোট রেপো পরিবর্তন প্রয়োজন ছিল বুঝতে পারছি না। তাই আমি আমার স্থানীয় রিপো থেকে আমার রিমোট git push দেওয়ার চেষ্টা করেছি, কিন্তু আমার মত একটি ত্রুটি হয়েছে:

ইতিহাস হারাতে আপনাকে আটকাতে, নন-ফাস্ট-ফরোয়ার্ড আপডেট বাতিল করা হয়েছে আবার ধাক্কা দেওয়ার আগে দূরবর্তী পরিবর্তনগুলি মার্জ করুন। বিস্তারিত জানার জন্য git push --help এর 'দ্রুত-অগ্রসর সম্পর্কে নোট' বিভাগটি দেখুন।

আমি সম্ভবত একটি চিন্তা

git push --force

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

আমি উত্তরগুলির একটিতে মন্তব্যের উল্লেখ করেছি:

[আমি] চেষ্টা করার চেষ্টা করেছি, কিন্তু পরিবর্তনগুলি সংরক্ষণ করার জন্য মাস্টার সার্ভারে ফিরে গেলে, আমি পুরানো স্টেজিং পেতে পারি। সুতরাং, যখন আমি রিপোজিটরিগুলি করি তখন একই হয় না। এবং আমি আবার গিট ধাক্কা ব্যবহার করার চেষ্টা করি, আমি একই ত্রুটি পেতে।

আমি কিভাবে এই সমস্যা ঠিক করতে পারি?


আমি যদি আমার স্থানীয় শাখায় আছি, এবং আমি স্থানীয় শাখা B টি মূল শাখাতে push করতে বাধ্য করতে চাই CI নিম্নলিখিত সিনট্যাক্স ব্যবহার করতে পারে:

git push --force origin B:C

আমি সত্যিই বলতে হবে:

অন্য কথায়, প্রধান সার্ভার এবং স্থানীয় কম্পিউটার থেকে উভয় অপেক্ষাকৃত রেপো অ্যাক্সেস রাখুন যাতে একক আপস্ট্রীম রেপো থেকে / যা টান / টানতে হয়।


এবং যদি push --force কাজ করে না আপনি push --delete করতে পারেন। এই উদাহরণে 2 ষ্ঠ লাইন দেখুন:

git reset --hard HEAD~3  # reset current branch to 3 commits ago
git push origin master --delete  # do a very very bad bad thing
git push origin master  # regular push

কিন্তু সাবধান!

কখনও কখনও একটি পাবলিক গিট ইতিহাস ফিরে যান!

অন্য কথায়:

  • একটি পাবলিক রিপোজিটরি উপর কখনও ধাক্কা না।
  • কেউ এর pull বিরতি করতে পারেন যে এই বা কিছু না।
  • কোনও rewrite ইতিহাস reset বা rewrite করবেন না ইতিমধ্যে কেউ টানা থাকতে পারে।

অবশ্যই এই নিয়ম পর্যন্ত ব্যতিক্রমগুলি খুব বিরল ব্যতিক্রম রয়েছে, তবে বেশিরভাগ ক্ষেত্রে এটি করার প্রয়োজন নেই এবং এটি অন্য সকলকে সমস্যার সৃষ্টি করবে।

পরিবর্তে একটি বিপরীত করবেন।

এবং সর্বদা আপনি একটি সরকারী repo ধাক্কা দিয়ে সাবধানে হতে হবে । প্রত্যাবর্তন করা হচ্ছে:

git revert -n HEAD~3..HEAD  # prepare a new commit reverting last 3 commits
git commit -m "sorry - revert last 3 commits because I was not careful"
git push origin master  # regular push

প্রকৃতপক্ষে, উভয় মূল HEADs (বিপরীত থেকে এবং মন্দ রিসেট থেকে ) একই ফাইল থাকবে।

push --force প্রায় আপডেট তথ্য এবং আরো আর্গুমেন্ট যোগ করতে সম্পাদনা করুন

ধাক্কা পরিবর্তে ইজারা দিয়ে শক্তি ঠেলাঠেলি বিবেচনা করুন, কিন্তু এখনও ফিরে পছন্দ

আরেকটি সমস্যা push --force আনতে আগে কিছু ধাক্কা যখন আনতে পারে, কিন্তু আপনি ইতিমধ্যে fetched পরে। আপনি এখন আপনার রিবেড সংস্করণ বল চাপা হলে আপনি অন্যদের থেকে কাজ প্রতিস্থাপন করবে।

git push --force-with-lease জিট 1.8.5 ( বলার অপেক্ষা রাখে না @ VonC মন্তব্য ধন্যবাদ ) এই শক্তিশালী সমস্যা মোকাবেলার চেষ্টা। মূলত, এটি একটি ত্রুটি আনতে এবং আপনার সর্বশেষ fetch থেকে রিমোট সংশোধন করা হয়েছে যদি ধাক্কা না।

আপনি যদি সত্যিই নিশ্চিত হন যে এটি একটি push --force দরকার তবে এটি আরও ভাল তবে এখনও আরও সমস্যাগুলি প্রতিরোধ করতে চান। আমি যতদূর বলতে চাই যে এটি ডিফল্ট push --force আচরণ হওয়া উচিত। কিন্তু এটি এখনও একটি push বলার জন্য একটি অজুহাত হতে দূরে। যারা আপনার রিবেসের আগে আনা হয়েছিল তারা এখনও প্রচুর সমস্যায় পড়বে, যদি আপনি পরিবর্তে প্রত্যাবর্তন করেন তবে এটি সহজেই এড়িয়ে যেতে পারে।

এবং যেহেতু আমরা git --push উদাহরণ সম্পর্কে কথা বলছি ...

কেন কেউ ধাক্কা করতে চান?

@linquize মন্তব্যের উপর একটি ভাল ধাক্কা শক্তি উদাহরণ আনা: সংবেদনশীল তথ্য । আপনি ভুলভাবে তথ্য ফাঁস করা হয়েছে যে ধাক্কা করা উচিত নয়। আপনি যদি যথেষ্ট দ্রুত থাকেন তবে শীর্ষে ধাক্কা দিয়ে আপনি এটি "ঠিক করতে " পারেন।

* আপনি যদি কোনও আবর্জনা সংগ্রহ না করেন বা কোনওভাবে এটি পরিষ্কার না করেন তবেও তথ্যটি দূরবর্তী স্থানে থাকবে । এটি ইতিমধ্যে এটি আনতে যারা অন্যদের দ্বারা বিস্তার করা জন্য সুস্পষ্ট সম্ভাবনা আছে, কিন্তু আপনি ধারণা পেতে।


নিম্নলিখিত কমান্ড ব্যবহার করুন:

git push -f origin master

সর্বোপরি, আমি "প্রধান" রেপোতে কোনও পরিবর্তন সরাসরি করব না। আপনি সত্যিই একটি "প্রধান" রেপো করতে চান, তাহলে আপনি শুধুমাত্র এটি ধাক্কা উচিত, এটি সরাসরি পরিবর্তন না।

আপনি যে ত্রুটিটি পেয়েছেন সে সম্পর্কে, আপনি কি আপনার স্থানীয় রেপো থেকে git pull চেষ্টা করেছেন এবং তারপরে প্রধান git push দিচ্ছেন? আপনি বর্তমানে যা করছেন (যদি আমি এটি ভালভাবে বুঝি) ধাক্কা ধরে এবং তারপর "প্রধান" রেপোতে আপনার পরিবর্তনগুলি হারাচ্ছে। আপনি প্রথমে স্থানীয়ভাবে পরিবর্তন মার্জ করা উচিত।






git-non-bare-repository