পুরো merge বা rebase-এর বদলে, আলাদাভাবে commit handle করার জন্য দুটো ছোট, প্রায়ই useful command।
Project history-র যেকোনো জায়গা থেকে একটা একক commit বর্তমান branch-এ apply করে — অন্য branch থেকে ঠিক একটা fix বা পরিবর্তন দরকার হলে useful, এতে থাকা সবকিছু না।
git switch main
git cherry-pick a1b2c3d
# commit a1b2c3d-এর ঠিক পরিবর্তন main-এ একটা নতুন commit হিসেবে apply করেএকটা আসল ব্যবহার: একটা feature branch-এ commit করা একটা bug fix তার সাথে feature branch-এর অসম্পূর্ণ কাজ merge না করেই অবিলম্বে main-এও যেতে হবে।
একটা merge-এর মতোই, target branch খুব বেশি diverge করলে একটা cherry-pick conflict করতে পারে — আগের Merge Conflicts lesson-এর ঠিক একই উপায়ে সমাধান করা: file edit করুন, marker সরান, তারপর continue করুন।
# প্রভাবিত file-এ conflict marker সমাধান করার পর:
git add .
git cherry-pick --continue
# বা সম্পূর্ণভাবে cherry-pick ছেড়ে দিন:
git cherry-pick --abortএকটা typo বা ভুলে যাওয়া file-এর জন্য একটা নতুন commit তৈরি করার বদলে, --amend এর বদলে একটা পরিবর্তন সবচেয়ে সাম্প্রতিক commit-এ ভাঁজ করে।
# শুধু commit message ঠিক করুন
git commit --amend -m "Corrected commit message"
# শেষ commit-এ একটা ভুলে যাওয়া file যোগ করুন, একই message রেখে
git add forgotten-file.txt
git commit --amend --no-editএকই shared-history নিয়ম এখানেও প্রযোজ্য
--amend শেষ commit সম্পূর্ণভাবে পুনর্লিখন করে — এটা একটা নতুন hash পায়। আগের lesson থেকে reset আর rebase-এর ঠিক একই নিয়ম: ইতিমধ্যে push হয়ে হয়তো অন্য কেউ pull করেছে এমন একটা commit কখনো amend করবেন না।
| Command | যার জন্য ব্যবহার |
|---|---|
| git cherry-pick | বর্তমান branch-এ একটা নির্দিষ্ট commit copy করা |
| git commit --amend | সবচেয়ে সাম্প্রতিক, এখনো-শেয়ার-না-করা commit-এর message বা content ঠিক করা |