গিট স্কোয়াশিং
স্কোয়াশ কি?
স্কোয়াশ মানে অনেকগুলো ছোট ছোট কমিটকে একটা কমিটে মিলিয়ে দেওয়া। ধরো তুমি একটা ফিচার বানাতে গিয়ে ১০টা কমিট করেছো:
fix typo
add button
fix button color
oops forgot semicolon
fix again
now it works
final fix
really final
ok done
এই ১০টা কমিট main ব্রাঞ্চে গেলে হিস্ট্রি নোংরা দেখায়। স্কোয়াশ করলে এগুলো একটাতে মিলে যাবে:
কন্ট্যাক্ট পেজের বাটন তৈরি করেছি
অনেক পরিষ্কার!
কিভাবে স্কোয়াশ করবে?
উপায় ১: Interactive Rebase
শেষ ৩টা কমিট স্কোয়াশ করতে:
git rebase -i HEAD~3
একটা এডিটর খুলবে:
pick a1b2c3d প্রথম কমিট
pick b2c3d4e দ্বিতীয় কমিট
pick c3d4e5f তৃতীয় কমিট
দ্বিতীয় আর তৃতীয়টার pick বদলে squash (বা শুধু s) লেখো:
pick a1b2c3d প্রথম কমিট
squash b2c3d4e দ্বিতীয় কমিট
squash c3d4e5f তৃতীয় কমিট
সেভ করে বেরিয়ে আসো। তারপর আরেকটা এডিটর খুলবে কমিট মেসেজের জন্য। নতুন মেসেজ লেখো:
কন্ট্যাক্ট পেজ তৈরি করেছি (সব চেইঞ্জসহ)
সেভ করো। ব্যস!
উপায় ২: মার্জ করার সময় স্কোয়াশ
git switch main
git merge --squash feature-branch
git commit -m "ফিচার ব্রাঞ্চের সব চেইঞ্জ একসাথে"
এটা ফিচার ব্রাঞ্চের সব কমিটকে একটা কমিটে মেলাবে।
উপায় ৩: গিটহাবে PR মার্জ করার সময়
গিটহাবে PR মার্জ করার সময় “Squash and merge” অপশন আছে। এটা সিলেক্ট করলে সব কমিট স্কোয়াশ হয়ে একটা কমিটে মার্জ হবে।
কখন স্কোয়াশ করবে?
- ফিচার ব্রাঞ্চ main এ মার্জ করার আগে
- অনেকগুলো ছোট “fix” কমিট থাকলে
- হিস্ট্রি পরিষ্কার রাখতে চাইলে
কখন স্কোয়াশ করবে না?
- যখন প্রতিটা কমিট আলাদা আলাদা অর্থবহ কাজ
- যখন হিস্ট্রিতে প্রতিটা স্টেপ দেখতে চাও
সারাংশ
| কমান্ড | কি করে |
|---|---|
git rebase -i HEAD~N | শেষ N টা কমিট ইন্টার্যাক্টিভলি এডিট করা |
git merge --squash branch | ব্রাঞ্চের সব কমিট একটাতে মেলানো |
| GitHub “Squash and merge” | PR মার্জের সময় স্কোয়াশ |
টিপ: PR পাঠানোর আগে স্কোয়াশ করলে মেইনটেইনাররা খুশি হয়। পরিষ্কার হিস্ট্রি সবাই পছন্দ করে!