উত্তর:
উভয় git merge --squash
এবং git rebase --interactive
একটি "স্কোয়াশেড" প্রতিশ্রুতি উত্পাদন করতে পারে।
তবে তারা বিভিন্ন উদ্দেশ্যে পরিবেশন করে।
কোনও সংযুক্তির সম্পর্ক চিহ্নিত না করে গন্তব্য শাখায় স্কোয়াশেড কমিট তৈরি করবে।
(দ্রষ্টব্য: এটি
এখনই কোনও প্রতিশ্রুতি তৈরি করে না: আপনার অতিরিক্ত প্রয়োজন git commit -m "squash branch"
)
আপনি যদি উত্স শাখাটি পুরোপুরি ফেলে দিতে চান তবে এটি কার্যকর হয় ( এসও প্রশ্ন থেকে নেওয়া স্কিমা ):
git checkout stable
X stable
/
a---b---c---d---e---f---g tmp
প্রতি:
git merge --squash tmp
git commit -m "squash tmp"
X-------------------G stable
/
a---b---c---d---e---f---g tmp
এবং তারপরে tmp
শাখা মুছে ফেলা হচ্ছে ।
দ্রষ্টব্য: git merge
একটি --commit
বিকল্প রয়েছে , তবে এটি ব্যবহার করা যাবে না --squash
। এটি ব্যবহার এবং একসাথে কখনও সম্ভব ছিল না ।
গিট 2.22.1 (Q3 2019) থেকে, এই অসম্পূর্ণতাটি স্পষ্ট করে দেওয়া হয়েছে:--commit
--squash
দেখুন 1d14d0c কমিট দ্বারা (24 মে 2019) বিশাল ভার্মা ( reloadbrain
) ।
(দ্বারা একীভূত junio সি Hamano - gitster
- মধ্যে কমিট 33f2790 , 25 জুলাই 2019)
merge
: প্রত্যাখ্যান--commit
সঙ্গে--squash
পূর্বে,
--squash
সরবরাহ করা হলে , 'option_commit
' নীরবে বাদ দেওয়া হত। এটি এমন একজন ব্যবহারকারীকে অবাক করে দিতে পারে যারা স্পষ্টতভাবে স্কোয়াশের অ-প্রতিশ্রুতিবদ্ধ আচরণকে ওভাররাইড করার চেষ্টা করেছিল--commit
।
git/git
builtin/merge.c#cmd_merge()
এখন অন্তর্ভুক্ত:
if (option_commit > 0)
die(_("You cannot combine --squash with --commit."));
আপনার কিছু বা সমস্ত প্রতিশ্রুতি নতুন বেসে রিপ্লে করে, আপনাকে স্কোয়াশ করার অনুমতি দেয় (বা আরও সম্প্রতি "ঠিক করা", এই SO প্রশ্নটি দেখুন ), সরাসরি এখানে যান:
git checkout tmp
git rebase -i stable
stable
X-------------------G tmp
/
a---b
যদি আপনি সমস্ত কমিটের স্কোয়াশ বেছে নিতে চান tmp
(তবে এর বিপরীতে আপনি merge --squash
কিছু পুনরায় খেলতে এবং অন্যকে স্কোয়াশ করতে পারেন)।
সুতরাং পার্থক্যগুলি হ'ল:
squash
আপনার উত্স শাখা স্পর্শ করে না ( tmp
এখানে) এবং আপনি যেখানে চান একটি একক প্রতিশ্রুতি তৈরি করে।rebase
আপনাকে একই উত্স শাখায় যেতে (এখনও tmp
) এর সাথে অনুমতি দেয়:
tmp
একসাথে স্কোয়াশড কমিটিকে উপস্থাপন করে।
G
একই বিষয়বস্তুর প্রতিনিধিত্ব করবে না । g
X
git merge --no-ff temp
পরিবর্তে যদি আপনার কাছে থাকে git merge --squash temp
তবে আপনি একটি মেসির ইতিহাস পেয়ে যাবেন তবে আপনি খুব git revert e
সহজেই এর মতো জিনিসও করতে পারেন। এটি একটি অগোছালো তবে সত্যবাদী এবং বাস্তববাদী ইতিহাস এবং মূল শাখাটি এখনও মোটামুটি পরিষ্কার remains
git bisect
বা git blame
খুব বেশি বেশি ব্যবহৃত হওয়ার সময়ও রয়েছে (যেমন git pull --no-ff
: স্ট্যাকওভারফ্লো / সেকশনস / 12798767/… )। সেখানে এক পদ্ধতির যাহাই হউক না কেন, যার কারণে এই নিবন্ধটি বর্ণনা তিনটি (হয় stackoverflow.com/questions/9107861/... )
মার্জ কমিটস: আপনার ব্রাঞ্চের সমস্ত কমিটকে ধরে রাখে এবং বেস শাখায় কমিট দিয়ে তাদেরকে ইন্টারলিভ করে
স্কোয়াশকে মার্জ করুন: পরিবর্তনগুলি ধরে রাখে তবে ইতিহাস থেকে স্বতন্ত্র কমিট বাদ দেয়
রিবেস: এটি পুরো বৈশিষ্ট্য শাখাকে মাস্টার শাখার ডগায় শুরু করতে প্রেরণা করে, কার্যকরভাবে নতুন সমস্ত কমিটকে মাস্টারে অন্তর্ভুক্ত করে
আরও এখানে
মার্জ স্কোয়াশ একটি বৃক্ষকে (একত্রিত করার ক্রম) একক প্রতিশ্রুতিতে মার্জ করে। এটি হ'ল এটি এন-এ করা সমস্ত পরিবর্তনকে একক প্রতিশ্রুতিতে স্কোয়াশ করে।
রিবেসিং হ'ল রি-বেসিং, অর্থাত্ একটি গাছের জন্য একটি নতুন বেস (প্যারেন্ট কমিট) বেছে নেওয়া। হতে পারে এর জন্য পারদর্শী শব্দটি আরও স্পষ্ট: তারা এটিকে ট্রান্সপ্ল্যান্ট বলে কারণ এটি কেবলমাত্র: গাছের জন্য একটি নতুন স্থল (পিতামাতার প্রতিশ্রুতিবদ্ধ, মূল) বাছাই করা।
ইন্টারেক্টিভ রিবেস করার সময়, আপনাকে স্কোয়াশ, বেছে নিতে, সম্পাদনা করতে বা আপনি যে কমিটগুলি পুনর্বার করতে চলেছেন তা এড়িয়ে যাওয়ার বিকল্প দেওয়া হবে।
আশা করি তা পরিষ্কার ছিল!
নীচের উদাহরণ দিয়ে শুরু করা যাক:
এখন আমরা এর পরিবর্তনগুলি মার্জ 3 অপশন আছে বৈশিষ্ট্য শাখা মধ্যে মাস্টার শাখা :
মার্জ কমিটগুলি বৈশিষ্ট্য শাখার
সমস্ত কমিটের ইতিহাস রাখে এবং এটিকে মাস্টার শাখায় স্থানান্তরিত করে
অতিরিক্ত ডমি অঙ্গীকার যুক্ত করবে।
রিবেস এবং সংযুক্তি মাস্টার শাখার সামনের ফিচার শাখার
সমস্ত সম্পাদনের ইতিহাস
যুক্ত করবে অতিরিক্ত ডমি কমিট যুক্ত করবে না।
স্কোয়াশ এবং একত্রিত
উইল সমস্ত বৈশিষ্ট্য শাখা একটি কমান্ট মধ্যে প্রতিশ্রুতিবদ্ধ তারপর মাস্টার শাখার সামনে এটি যুক্ত
করুন অতিরিক্ত ডমি অঙ্গীকার যুক্ত করবে।
আপনি নীচের দিকে দেখতে পারেন যে কীভাবে মাস্টার শাখা তাদের প্রত্যেকটির যত্ন নেবে ।
সব ক্ষেত্রে:
আমরা বৈশিষ্ট্য শাখাটি নিরাপদে মুছে ফেলতে পারি ।
G
হয়c--d--e--f--g
একসঙ্গে squashed?