যখন এটি কমিটের একটি সীমাতে আসে, চেরি-বাছাই হয় ব্যবহারিক ছিল না।
কিথ কিমের দ্বারা নীচে উল্লিখিত হিসাবে , গিট 1.7.2+ অনেকগুলি কমিটের চেরি-বাছাই করার দক্ষতার পরিচয় দিয়েছে (তবে ভবিষ্যতে সংযুক্তির জন্য আপনাকে চেরি-পিকিংয়ের ফলাফল সম্পর্কে এখনও সচেতন হওয়া দরকার )
গিট চেরি-পিক "অনেকগুলি কমিট
(যেমন" " cherry-pick A..B
" এবং " cherry-pick --stdin
") বাছাই করতে শিখেছে , " git revert
" যেমনটি rebase [-i]
করেছে; যদিও এগুলি উত্তম সিকোয়েন্সিং নিয়ন্ত্রণকে সমর্থন করে না " "।
দামিয়ান মন্তব্য এবং আমাদের সতর্ক করে:
cherry-pick A..B
ফর্মটিতে " " এর A
চেয়ে বড় হওয়া উচিতB
।
যদি তারা ভুল আদেশ হয় তবে কমান্ডটি নিঃশব্দে ব্যর্থ হবে ।
আপনি যদি (অন্তর্ভুক্ত) মাধ্যমে পরিসরটিB
D
চয়ন করতে চান তবে তা হবে B^..D
। একটি চিত্র হিসাবে
" গিট পূর্ববর্তী কমিটের পরিসর থেকে শাখা তৈরি করবেন? " দেখুন।
যুবস মন্তব্যগুলিতে যেমন উল্লেখ করেছেন :
এটি ধরে নেয় যে B
মূল প্রতিশ্রুতি নয়; unknown revision
অন্যথায় আপনি একটি " " ত্রুটি পাবেন।
দ্রষ্টব্য: গিট 2.9.x / 2.10 (Q3 2016) হিসাবে, আপনি সরাসরি অনাথ শাখায় (খালি মাথা) অনেকগুলি প্রতিশ্রুতিবদ্ধভাবে চেরি-বাছাই করতে পারেন: " বিদ্যমান শাখাকে গিটের মধ্যে এতিম কীভাবে তৈরি করবেন " দেখুন।
আসল উত্তর (জানুয়ারী ২০১০)
এ rebase --onto
আরও ভাল হবে, যেখানে আপনি চার্জ বেলি এখানে বর্ণিত হিসাবে আপনার সংহত শাখার শীর্ষে প্রদত্ত প্রতিশ্রুতি পুনরায় খেলুন ।
(এছাড়াও, গিট রিবেস ম্যান পৃষ্ঠাতে "আপনি এখানে কীভাবে একটি শাখার উপর ভিত্তি করে বিষয় শাখাটি অন্য একটি শাখায় প্রতিস্থাপন করবেন" দেখুন, এর ব্যবহারিক উদাহরণ দেখতে git rebase --onto
)
যদি আপনার বর্তমান শাখা একীকরণ হয়:
# Checkout a new temporary branch at the current location
git checkout -b tmp
# Move the integration branch to the head of the new patchset
git branch -f integration last_SHA-1_of_working_branch_range
# Rebase the patchset onto tmp, the old location of integration
git rebase --onto tmp first_SHA-1_of_working_branch_range~1 integration
এটি এর মধ্যে সমস্ত কিছু রিপ্লে করবে:
first_SHA-1_of_working_branch_range
(অতএব ~1
) এর পিতামাতার পরে : প্রথম প্রতিশ্রুতি আপনি পুনরায় খেলতে চান
- "
integration
" অবধি (যা working
শাখা থেকে আপনি পুনরায় খেলতে চান এমন সর্বশেষ প্রতিশ্রুতির দিকে নির্দেশ করেন )
" tmp
" (যা integration
আগে কোথায় নির্দেশ করছিল)
যদি সেগুলির মধ্যে একটির কমিট পুনরায় খেলানো হয় তখন যদি কোনও বিরোধ হয়:
- হয় এটি সমাধান করুন এবং চালান "
git rebase --continue
"।
- অথবা এই প্যাচটি এড়িয়ে যান এবং পরিবর্তে "
git rebase --skip
" চালান
- বা "
git rebase --abort
" দিয়ে সমস্ত জিনিস বাতিল করুন (এবং integration
শাখায় শাখাটি পিছনে রাখুন tmp
)
এর পরে rebase --onto
, integration
ইন্টিগ্রেশন শাখার শেষ প্রতিশ্রুতিতে ফিরে আসবে (এটি tmp
শাখা + সমস্ত রিপ্লেড কমিটস)
চেরি-বাছাইয়ের সাথে বা rebase --onto
ভুলে যাবেন না যে এখানে বর্ণিত হিসাবে পরবর্তী মার্জগুলিতে এর পরিণতি রয়েছে ।
একটি খাঁটি " cherry-pick
" সমাধানটি এখানে আলোচনা করা হয়েছে এবং এর মতো কিছুতে জড়িত:
আপনি যদি কোনও প্যাচ পদ্ধতির ব্যবহার করতে চান তবে "গিট ফর্ম্যাট-প্যাচ | গিট এমএম" এবং "গিট চেরি" আপনার বিকল্প।
বর্তমানে, git cherry-pick
শুধুমাত্র একটি একক কমিট গ্রহণ, কিন্তু আপনি পরিসীমা বাছাই করতে চান তাহলে B
মাধ্যমে D
যে হবে B^..D
Git শ্রেণীর বা সম্প্রদায়ের ভাষা যাতে,
git rev-list --reverse --topo-order B^..D | while read rev
do
git cherry-pick $rev || break
done
তবে যাইহোক, যখন আপনাকে অনেকগুলি কমিট "রিপ্লে" করতে হবে তখন "রিপ্লে" শব্দটি আপনাকে rebase
গিটের " " বৈশিষ্ট্যটি ব্যবহার করার জন্য চাপ দিতে হবে ।