রিবেসিং এবং ধাক্কা দেওয়া কমিটগুলি রিবাইজ করার মাধ্যমে কী বোঝায়


109

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

উত্তর:


80

ProGit বই টি ভাল ব্যাখ্যা

আপনার প্রশ্নের সুনির্দিষ্ট উত্তর " রিবসিংয়ের বিপদ " শিরোনামে বিভাগে পাওয়া যাবে । বিভাগ থেকে একটি উদ্ধৃতি:

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

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


ব্যাখ্যার জন্য ধন্যবাদ. সুতরাং, আমি আমার বোঝার বিষয়টি আরও স্পষ্ট করার জন্য, আমি কিছু পরিবর্তন আনার পরে, আমি git rebaseসেই ইতিহাসটি পুনরায় লেখার জন্য (- ইন্টারেক্টিভ?) ব্যবহার করা উচিত নয় , এটি অবশ্যই ব্যর্থতার রেসিপি O অন্যদিকে, যদি আমি বিষয়টিতে কিছু পরিবর্তন প্রত্যাখ্যান করেছি শাখা (শাখা এক্স থেকে) এবং এটিকে ধাক্কা দেয়, অন্য বিকাশকারী বিষয় শাখার পরিবর্তনের পরে এটি পুনরায় পুনরায় চালু করা একেবারে স্বাভাবিক। মূলত, আমি mergeবেশ কিছু সময়ের জন্য ব্যবহার করে আসছি , তবে আমরা একই নৌকায়, ডারউইনওয়েব.नेट / পার্টিকেল / 86৮ এবং ইতিহাস প্রায় অকেজো
হেমন্ত কুমার

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

থেকে সম্পর্কে "ব্যক্তিগত পরিচালিত টিম" "ProGit" পৃষ্ঠা একটি লিঙ্ক আপডেট করুন git-scm.com/book/en/...
Eimantas

প্রযুক্তিগতভাবে, গিট কমিট একই থাকে তবে "বিদ্যমান কমিটগুলি বিসর্জন দেওয়া এবং সাদৃশ্যযুক্ত তবে ভিন্ন একটি নতুন তৈরি করা" বিভিন্ন শ 1 আইডি দিয়ে কেবল একই প্রতিশ্রুতিবদ্ধ? আমি কেবল এটিই ভাবতে পারি যে সহযোগীরা কীভাবে তাদের নিজস্ব কাজকে পুনরায় একীভূত করতে হবে!
সিয়াস্তো পাইকার্জ

@ কায়স্তোপিকার্জ, এটি কারণ আপনি উজানের রেপোতে ইতিহাস পুনর্লিখন করছেন এবং অন্যান্য বিকাশকারীর স্থানীয় রেপোগুলিতে এটির নির্দেশক থাকতে পারে। এখন তাদের পয়েন্টারগুলি বাসি: গিট ক্লায়েন্টের কোনও পুরানো পয়েন্টার ব্যবহার করা এবং বাকীটি সাজানোর জন্য মানুষের উপর নির্ভর করা ছাড়া বিকল্প নেই। এটি একটি পুনরায় মার্জ, এবং এটি ম্যানুয়ালি বাছাই করা আবশ্যক যে অনেক বিভ্রান্তিমূলক পরিবর্তন সঙ্গে খুব অগোছালো হতে পারে! সুতরাং ইতিমধ্যে একটি প্রবাহ রেপোতে ইতিমধ্যে ধাক্কা দেওয়া হয়েছে এমন কোনও কিছু পুনরায় চালু করার জন্য সুপারিশটি কখনই রিব্যাক করবে না। এটি ভাল পরামর্শ এবং আপনি গভীর জ্ঞানের বিশেষজ্ঞ না হলে এটিকে এড়ানো হবে না।
ফোর্বিন

240

এটি বুঝতে, গিট কীভাবে কাজ করে সে সম্পর্কে আমাদের কিছুটা বুঝতে হবে। গিট সংগ্রহস্থল একটি গাছের কাঠামো, যেখানে গাছের নোডগুলি কমিট হয়। এখানে একটি খুব সাধারণ সংগ্রহস্থলের উদাহরণ: আপনি কাঁটাচামচ যখন

এটি মাস্টার শাখায় চারটি কমিট করে এবং প্রতিটি কমিটের একটি আইডি থাকে (এই ক্ষেত্রে, ক, খ, সি এবং ডি)। আপনি লক্ষ্য করবেন যে ডি বর্তমানে মাস্টার শাখার সর্বশেষ প্রতিশ্রুতি (বা হেড)। এখানে চিত্র বর্ণনা লিখুন

এখানে, আমাদের দুটি শাখা রয়েছে: মাস্টার এবং মাই-ব্রাঞ্চ। আপনি দেখতে পাচ্ছেন যে মাস্টার এবং আমার শাখা উভয় a এবং b করে থাকে তবে তারপরে তারা বিভাজন শুরু করে: মাস্টারে সি এবং ডি থাকে, তবে আমার শাখায় ই এবং এফ থাকে। বি কে মাস্টারের তুলনায় আমার-শাখার "মার্জ বেস" বলা হয় - বা আরও সাধারণভাবে কেবল "বেস"। এটি উপলব্ধি করে: আপনি দেখতে পাচ্ছেন যে আমার শাখাটি মাস্টারের পূর্ববর্তী সংস্করণের উপর ভিত্তি করে ছিল।

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

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

যখন আপনি পুনঃস্থাপন করেন, গিটটি আপনার শাখার গোড়া খুঁজে পায় (এই ক্ষেত্রে, খ), সেই বেস এবং হেডের মধ্যে সমস্ত চুক্তি খুঁজে বের করে (এই ক্ষেত্রে, ই এবং এফ), এবং শাখার হেডে সেই প্রতিশ্রুতিগুলি পুনরায় খেলবে আপনি এই ক্ষেত্রে অব্যাহতি দিচ্ছেন (এই ক্ষেত্রে, মাস্টার) গিট আসলে নতুন কমিটস তৈরি করে যা আপনার পরিবর্তনগুলি মাস্টারের শীর্ষে দেখতে কেমন তা উপস্থাপন করে: ডায়াগ্রামে এই কমিটগুলি ই-এবং এফ called বলা হয় ′ গিট আপনার পূর্ববর্তী প্রতিশ্রুতিগুলি মুছে ফেলবে না: ই এবং এফটি এটিকে ছেড়ে দেওয়া হয়েছে এবং যদি রিবেসটিতে কোনও সমস্যা হয় তবে আপনি আগের মতো করে ফিরে যেতে পারেন things

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


68

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

ষড়যন্ত্রগুলি সত্যই একসাথে রাখা শক্ত, সুতরাং আপনি প্রথমে সর্বজনীন শাখাগুলিকে ছাড় দেওয়া ভাল avoid

উল্লেখ্য যে হয় সফল ষড়যন্ত্র উদাহরণ: pujunio সি Hamano এর Git সংগ্রহস্থলের শাখা (গীত এস সি এম অফিসিয়াল সংগ্রহস্থলের) ঘন ঘন রি-বেস করা হয়। যেভাবে এটি কাজ করে তা হ'ল বেশিরভাগ যারা ব্যবহার করেন puতারাও গিট বিকাশকারী মেলিংলিস্টের সাবস্ক্রাইব হন এবং puশাখাটি পুনর্বাসিত হয়েছে তা মেলিংলিস্ট এবং গিট ওয়েবসাইটে ব্যাপক প্রচারিত হয়।


4
+1 টি। আমি মনে করি pugit.git এর শাখাটি কীভাবে (জন) ওয়ার্কফ্লোতে রিবেস ব্যবহার করবেন তার একটি চূড়ান্ত সহায়ক উদাহরণ। যাঁরা এর সাথে পরিচিত নন, তাদের জন্য সাধারণ ধারণাটি হ'ল বিষয় শাখাগুলি পুনরায় চালু করা next(যার সাথে মাস্টারে মার্জ হওয়ার ঠিক আগে অস্থির শাখা) থাকে না, তারপরে পুনরায় puসেট করে nextএবং সমস্ত বিষয় শাখা মার্জ করে শাখাটি পুনর্নির্মাণ করে । (সূত্র: নথিপত্র / হাওটুর / বজায় রাখা-git.txt git.kernel.org/?p=git/git.git;a=blob;f=Documentation/howto/... )
Cascabel

25
"গিটে পুনর্লিখনের ইতিহাস যেমন বাস্তব জগতে ঠিক তেমনভাবে কাজ করে: আপনার একটি ষড়যন্ত্রের দরকার"
স্লিপার স্মিথ

"পু হিসাবে একটি বর্ণনামূলক শাখা, যেহেতু উপরে বর্ণিত রয়েছে তেমন কোনও প্রকাশ্য ঘোষণা জরুরি নয়।" git-scm.com/docs/gitworkflows আমরা কাজের জায়গায় একই রকম কিছু করি, " TEMP-કંઈક- সর্বশেষ" হ'ল একটি নিক্ষেপ শাখা যা সর্বশেষ পরিবর্তনের সংমিশ্রণ, এটি একাধিক বৈশিষ্ট্যযুক্ত শাখার একীকরণ হতে পারে, মুছে ফেলা হতে পারে এবং যেকোন সময় পুনরায় তৈরি করা হয়েছে এবং এটি বিকাশ করা উচিত নয়।

6

একটি রিবেস আপনার সংগ্রহস্থলের ইতিহাস পরিবর্তন করে। আপনি যদি বিশ্বের কাছে প্রতিশ্রুতিবদ্ধ রাখেন, অর্থাত্‍ এগুলি অন্যের কাছে উপলভ্য করে দিন এবং তারপরে আপনি প্রতিশ্রুতিবদ্ধ ইতিহাস সম্পর্কে আপনার দৃষ্টিভঙ্গি পরিবর্তন করেন, যার সাথে আপনার পুরানো ইতিহাস রয়েছে তার সাথে কাজ করা কঠিন হয়ে পড়ে।

আমার মনে হয় রিবেসকে ক্ষতিকারক হিসাবে বিবেচনা করা একটি ভাল ওভারভিউ is

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