উত্তর:
গিটে চেরি তোলা মানে একটি শাখা থেকে কমিট বেছে নেওয়া এবং অন্যটিতে প্রয়োগ করা।
এটি অন্য উপায়গুলির সাথে বিপরীত যেমন merge
এবং rebase
যা সাধারণত অন্য শাখায় অনেকগুলি প্রয়োগ করে apply
আপনি যে শাখায় দায়বদ্ধতা প্রয়োগ করতে চান সেটিতে আপনি রয়েছেন তা নিশ্চিত করুন।
git checkout master
নিম্নলিখিতটি কার্যকর করুন:
git cherry-pick <commit-hash>
বিশেষ দ্রষ্টব্য:
আপনি যদি কোনও সরকারী শাখা থেকে চেরি-বাছাই করেন তবে আপনার ব্যবহারটি বিবেচনা করা উচিত
git cherry-pick -x <commit-hash>
এটি একটি স্ট্যান্ডার্ডাইজড কমিট বার্তা উত্পন্ন করবে। এইভাবে, আপনি (এবং আপনার সহকর্মীরা) এখনও প্রতিশ্রুতিবদ্ধতার উত্সের উপর নজর রাখতে পারেন এবং ভবিষ্যতে মার্জ সংঘাতগুলি এড়াতে পারেন।
আপনার যদি কমিটের সাথে সংযুক্ত নোটগুলি থাকে তবে তারা চেরি-পিক অনুসরণ করে না। এগুলি পাশাপাশি আনতে আপনাকে ব্যবহার করতে হবে:
git notes copy <from> <to>
অতিরিক্ত লিঙ্ক:
git cherry-pick -x <commit-hash>
। এটি একটি স্ট্যান্ডার্ডাইজড কমিট বার্তা উত্পন্ন করবে। এইভাবে, আপনি (এবং আপনার সহকর্মীরা) এখনও প্রতিশ্রুতিবদ্ধতার উত্সের উপর নজর রাখতে পারেন এবং ভবিষ্যতে মার্জ সংঘাতগুলি এড়াতে পারেন।
git notes copy <from> <to>
এগুলি এনে দেওয়ার জন্য আপনাকেও ব্যবহার করতে হবে।
"cherry-pick commit applies the changes introduced by the named commit on the current branch"
সর্বাধিক পিপিএল প্রতিশ্রুতিবদ্ধতা হিসাবে পরিবর্তনগুলি ভাবায় (যেমন এসএনএন আইআরসি ছিল), তবে এটি নয়, প্রতিটি প্রতিশ্রুতি সম্পূর্ণ কার্যকারী গাছকে বোঝায়। যদিও এটি এই ক্ষেত্রে কোনও পার্থক্য রাখে না, এটি গিটটি কেন এটির মতো কাজ করে তা বুঝতে সহায়তা করতে পারে।
এই উদ্ধৃতিটি নেওয়া হয়েছে; গিট সহ সংস্করণ নিয়ন্ত্রণ (সত্যিই দুর্দান্ত বই, আপনি গিটে আগ্রহী হলে এটি কিনতে উত্সাহিত করি)
সম্পাদনা: যেহেতু এই উত্তরটি এখনও ইমপ্রেশন পাচ্ছে, তাই আমি এটি সম্পর্কে অ্যাকশন ভিডিও টিউটোরিয়ালে খুব সুন্দর যুক্ত করতে চাই:
ইউটিউব: গিট চেরি-পিকের পরিচিতি
গিট চেরি-পিক ব্যবহার করে কমান্ড গিট চেরি-পিক কমিট বর্তমান শাখায় নামযুক্ত কমিট দ্বারা প্রবর্তিত পরিবর্তনগুলি প্রয়োগ করে। এটি একটি নতুন, স্বতন্ত্র প্রতিশ্রুতি প্রবর্তন করবে। কঠোরভাবে বলতে গেলে, গিট চেরি-পিক ব্যবহার করে কোনও ইতিহাসের মধ্যে বিদ্যমান ইতিহাসের পরিবর্তন হয় না; পরিবর্তে, এটি ইতিহাসে যুক্ত করে। অন্যান্য গিট অপারেশনগুলির মতো যা কোনও ডিফ প্রয়োগের প্রক্রিয়াটির মাধ্যমে পরিবর্তনের সূচনা করে, প্রদত্ত প্রতিশ্রুতি থেকে পরিবর্তনগুলি পুরোপুরি প্রয়োগ করতে আপনার দ্বন্দ্ব সমাধানের প্রয়োজন হতে পারে । গিট চেরি-পিক কমান্ডটি সাধারণত কোনও শাখা থেকে আলাদা শাখায় একটি শাখা থেকে নির্দিষ্ট কমিটগুলি প্রবর্তন করতে ব্যবহৃত হয়। একটি সাধারণ ব্যবহার হ'ল ফরোয়ার্ড করা - বা ব্যাক-পোর্ট একটি রক্ষণাবেক্ষণ শাখা থেকে একটি উন্নয়ন শাখায় অঙ্গীকার করে।
$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, above
আগে:
পরে:
গিটে চেরি পিকিং একটি শাখা থেকে অন্য শাখায় কিছু প্রতিশ্রুতি প্রয়োগ করার জন্য ডিজাইন করা হয়েছে। এটি করা যেতে পারে যদি আপনি উদাহরণস্বরূপ। একটি ভুল করেছেন এবং ভুল শাখায় পরিবর্তনের প্রতিশ্রুতিবদ্ধ করেছেন, তবে পুরো শাখাকে একীভূত করতে চান না। আপনি ঠিক যেমন করতে পারেন। প্রতিশ্রুতি ফিরিয়ে দিন এবং চেরি-এটিকে অন্য একটি শাখায় তুলে নিন।
এটি ব্যবহার করতে, আপনার কেবল প্রয়োজন git cherry-pick hash
, hash
অন্য শাখা থেকে কমিট হ্যাশ is
সম্পূর্ণ পদ্ধতির জন্য দেখুন: http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patch-across-bunchches.html
অবস্থার সংক্ষিপ্ত উদাহরণ, যখন আপনার চেরি বাছাই দরকার
নিম্নলিখিত পরিস্থিতিতে বিবেচনা করুন। আপনার দুটি শাখা আছে।
ক) রিলিজ 1 - এই শাখাটি আপনার গ্রাহকের কাছে যাচ্ছে, তবে এখনও কিছু বাগ ঠিক করা আছে।
খ) মাস্টার - ক্লাসিক মাস্টার শাখা, যেখানে আপনি উদাহরণস্বরূপ মুক্তির জন্য কার্যকারিতা যুক্ত করতে পারেন।
এখন : আপনি রিলিজ 1 এ কিছু ঠিক করেছেন । অবশ্যই আপনি মাস্টার মধ্যে এই ঠিক করা প্রয়োজন । এবং এটি চেরি বাছাইয়ের জন্য সাধারণ ব্যবহারের ক্ষেত্রে। সুতরাং এই দৃশ্যে চেরি পিক করার অর্থ হল যে আপনি রিলিজ 1 শাখা থেকে একটি প্রতিশ্রুতি নেন এবং এটি মাস্টার শাখায় অন্তর্ভুক্ত করেন ।
চেরি-পিক একটি গিট বৈশিষ্ট্য। যদি কেউ একটি শাখায় একটি নির্দিষ্ট শাখায় নির্দিষ্ট অঙ্গীকারবদ্ধ করতে চায় তবে চেরি-পিক ব্যবহার করা হয়।
গিট চেরি-পিক পদক্ষেপ নীচের মত রয়েছে।
git cherry-pick <commit id>
এখানে কমিট আইডি হ'ল অন্য শাখার ক্রিয়াকলাপ আইডি g
git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
চেরি-পিক কী করে তা আমি ধাপে ধাপে চিত্রগুলি প্রস্তুত করেছি - এবং এই চিত্রগুলির একটি অ্যানিমেশন (শেষের দিকে)।
বিঃদ্রঃ:
কমিট L'
হয় (কমিট = স্ন্যাপশট) দেখুন ব্যবহারকারীর বিন্দু থেকে কমিট সঠিক কপি L
।
প্রযুক্তিগতভাবে (অভ্যন্তরীণভাবে), এটি একটি নতুন, পৃথক প্রতিশ্রুতি (কারণ যেমন L
একটি পয়েন্টার K
(যার পিতামাতা হিসাবে L'
রয়েছে ), যেখানে এতে একটি পয়েন্টার রয়েছে E
)।
আপনি ভাবতে পারেন যে কোনও চেরি যদি একটি রিবেসের সমতুল্য বাছাই করে, বা এটি বরং একটি রিবেসের মতো পরিচালিত হয়। এর মাধ্যমে, আমার অর্থ এই যে এটি একটি বিদ্যমান প্রতিশ্রুতি নেয় এবং এটি পুনরায় জেনারেট করে, সূচনা পয়েন্ট হিসাবে, আপনি বর্তমানে যে শাখায় আছেন সেটির প্রধান।
এ rebase
একটি প্রতিশ্রুতি নেয় যার পিতা বা মাতা এক্স থাকে এবং সেই প্রতিশ্রুতি পুনরায় জেনারেট করে যেমন এটির সত্যই পিতামাতার ওয়াই ছিল এবং এটি ঠিক কী এটি cherry-pick
করে।
চেরি পিকটি আপনি কীভাবে কমিটগুলি নির্বাচন করবেন সে সম্পর্কে আরও বেশি। সঙ্গে pull
(রি-বেসের ফলে), Git পরোক্ষভাবে আপনার শাখায় টানা হচ্ছে উপরে আপনার স্থানীয় করে পুণরায় কিন্তু সঙ্গে cherry-pick
আপনি স্পষ্টভাবে কিছু কমিট (গুলি) চয়ন করুন এবং পরোক্ষভাবে আপনার বর্তমান শাখা উপরের তে এটি (তাদের) পুনরায় নির্মাণ।
সুতরাং আপনি যেভাবে এটি করেন তার থেকে পৃথক হয় তবে হুডের নীচে এগুলি খুব অনুরূপ ক্রিয়াকলাপ comm কমিটগুলির পুনর্জন্ম।
cherry-pick
করে যখন লক্ষ্য শাখাটি পরে উত্স শাখায় ফেরত দেওয়া হয় তখন কেন এটির মতো আচরণ করে। ধন্যবাদ জনাব.
এটি একধরনের অনুলিপি (কোথাও থেকে) এবং আটকানো (কোথাও), তবে নির্দিষ্ট কমিটের জন্য।
উদাহরণস্বরূপ, আপনি যদি কোনও হট ফিক্স করতে চান তবে আপনি cherry-pick
বৈশিষ্ট্যটি ব্যবহার করতে পারেন ।
আপনার cherry-pick
একটি উন্নয়ন শাখায় করুন, এবং merge
এটি একটি রিলিজ শাখায় প্রতিশ্রুতিবদ্ধ। তেমনি, cherry-pick
মুক্তির শাখা থেকে মাস্টার করার জন্য একটি করুন। voila
আপনি যখন কোনও প্রকল্পে বিকাশকারীদের একটি দলের সাথে কাজ করছেন, তখন বেশ কয়েকটি গিট শাখার মধ্যে পরিবর্তনগুলি পরিচালনা করা একটি জটিল কাজ হয়ে উঠতে পারে। কখনও কখনও আপনি একটি সম্পূর্ণ শাখা অন্যটিতে মার্জ করতে চান না এবং কেবল একটি বা দুটি নির্দিষ্ট কমিট বেছে নিতে হবে। এই প্রক্রিয়াটিকে 'চেরি পিকিং' বলা হয়।
চেরি বাছাইয়ের জন্য একটি দুর্দান্ত নিবন্ধ পাওয়া গেছে, গভীরতার জন্য বিশদ বিবরণের জন্য এটি পরীক্ষা করে দেখুন: https://www.preLivenext.com.au/blog/intro-cherry-picking-git
আপনি যদি কমিটস আইডি ব্যতীত মার্জ করতে চান তবে আপনি এই আদেশটি ব্যবহার করতে পারেন
git cherry-pick master~2 master~0
উপরের কমান্ডটি মাস্টার থেকে সর্বশেষ তিনটি কমিটকে 1 থেকে 3 পর্যন্ত একীভূত করবে
আপনি যদি একক প্রতিশ্রুতিবদ্ধতার জন্য এটি করতে চান তবে কেবল সর্বশেষ বিকল্পটি সরিয়ে দিন
git cherry-pick master~2
এইভাবে আপনি মাস্টার শেষ থেকে 3 য় প্রতিশ্রুতি একীভূত করবেন।
এটি আপনার বর্তমান শাখায় একটি বিশেষ প্রতিশ্রুতি প্রয়োগ করবে।
এর অর্থ:
প্রাক্তন: কমিট এ বিবেচনা করুন
added newFileA
modified main:
+ import './newFileA'
কমিট বি
added newFileB
modified main:
+ import './newFileB'
আপনি যদি চেরি-বাছাই করে অন্য কোনও শাখায় বি প্রতিশ্রুতিবদ্ধ হন তবে আপনি এতে শেষ করবেন:
/newFileB
/main :
import './newFileA'
import './newFileB'
যেহেতু কমিট বিতে নতুন ফাইলবিল এবং প্রধান রয়েছে তবে কোনও নতুন ফাইলএইস নেই যার ফলে একটি বাগ রয়েছে, তাই সাবধানতার সাথে ব্যবহার করুন।
সরকারী দস্তাবেজগুলির অংশ:
এক বা একাধিক বিদ্যমান প্রতিশ্রুতি দেওয়া, প্রত্যেকে পরিচয় করা পরিবর্তনটি প্রয়োগ করুন এবং প্রতিটিটির জন্য একটি নতুন প্রতিশ্রুতি রেকর্ড করুন। এর জন্য আপনার কার্যনির্বাহী গাছটি পরিষ্কার হওয়া দরকার (হেড কমিট থেকে কোনও পরিবর্তন হয়নি)।
কীভাবে পরিবর্তনটি প্রয়োগ করা যায় তা স্পষ্ট না হলে নিম্নলিখিতটি ঘটে:
বর্তমান শাখা এবং হেড পয়েন্টার সফলভাবে করা শেষ প্রতিশ্রুতিতে থাকে stay
CHERRY_PICK_HEAD রেফিট প্রয়োগ করা কঠিন যে পরিবর্তনটি প্রবর্তন করেছিল সেই প্রতিশ্রুতিতে নির্দেশ করতে প্রস্তুত।
পরিবর্তনগুলি পরিষ্কারভাবে প্রয়োগ করা পথগুলি সূচক ফাইল এবং আপনার কার্যকারী গাছের মধ্যে উভয়ই আপডেট করা হয়।
বিবাদমান পাথের জন্য, গিট-সংশ্লেষের "সত্য মার্জ" বিভাগে বর্ণিত হিসাবে সূচক ফাইলটি তিনটি সংস্করণ পর্যন্ত রেকর্ড করে। কার্যকারী ট্রি ফাইলগুলিতে <<<<<<<< এবং >>>>>>> সাধারণ সংঘাত চিহ্নিতকারীদের দ্বারা বন্ধনীযুক্ত বিরোধের বিবরণ অন্তর্ভুক্ত থাকবে।
অন্য কোন পরিবর্তন করা হয় না।