git add . বনাম git add -A বনাম git add -u — পার্থক্য
এই তিনটি কমান্ডই ফাইল staging area-তে যোগ করে, কিন্তু কোন ধরনের পরিবর্তন এবং কোন জায়গা থেকে stage করবে — সেখানেই পার্থক্য।
প্রথমে বুঝতে হবে, একটি ফাইলের পরিবর্তন তিন ধরনের হতে পারে:
- নতুন ফাইল (new/untracked) — Git আগে কখনো ট্র্যাক করেনি
- পরিবর্তিত ফাইল (modified) — আগে থেকে ট্র্যাক করা ফাইলে পরিবর্তন
- মুছে ফেলা ফাইল (deleted) — ট্র্যাক করা ফাইল ডিলিট করা হয়েছে
১. git add . — বর্তমান ডিরেক্টরির সব পরিবর্তন
git add . বর্তমান ডিরেক্টরি এবং তার ভেতরের সব সাবডিরেক্টরির নতুন, পরিবর্তিত, এবং মুছে ফেলা — সব ধরনের পরিবর্তন stage করে।
git add . # current directory থেকে নিচের দিকে সবকিছু
মনে রাখার বিষয়: এটি শুধু আপনি এখন যে ফোল্ডারে আছেন সেখান থেকে নিচের দিকে কাজ করে। আপনি যদি প্রজেক্টের কোনো সাবফোল্ডারে (যেমন src/main/java/) থেকে git add . চালান, তাহলে প্রজেক্টের অন্য জায়গার (যেমন root-এর pom.xml) পরিবর্তন stage হবে না।
২. git add -A — পুরো রিপোজিটরির সব পরিবর্তন
git add -A (বা git add --all) পুরো রিপোজিটরির সব জায়গা থেকে নতুন, পরিবর্তিত, এবং মুছে ফেলা — সব পরিবর্তন stage করে, আপনি যে ফোল্ডারেই থাকুন না কেন।
git add -A # পুরো রিপোজিটরির সবকিছু, যেখান থেকেই চালান
এটি সবচেয়ে "সম্পূর্ণ" কমান্ড — কোনো পরিবর্তন বাদ পড়বে না।
৩. git add -u — শুধু ট্র্যাক করা ফাইলের পরিবর্তন
git add -u (বা git add --update) শুধু আগে থেকে ট্র্যাক করা ফাইলগুলোর পরিবর্তন stage করে — অর্থাৎ modified এবং deleted ফাইল। নতুন (untracked) ফাইল stage করে না।
git add -u # শুধু modified + deleted, নতুন ফাইল বাদ
ব্যবহারিক উদাহরণ: ধরুন আপনি কয়েকটি বিদ্যমান Java ক্লাসে refactoring করেছেন, কিন্তু পাশাপাশি কিছু পরীক্ষামূলক (experimental) নতুন ফাইলও বানিয়েছেন যেগুলো এখনই commit করতে চান না। তখন git add -u চালালে শুধু refactoring-এর পরিবর্তনগুলো stage হবে, নতুন ফাইলগুলো untracked অবস্থায় থেকে যাবে।
তুলনামূলক ছক এক নজরে
| পরিবর্তনের ধরন | git add . |
git add -A |
git add -u |
|---|---|---|---|
| নতুন (untracked) ফাইল | ✅ হ্যাঁ | ✅ হ্যাঁ | ❌ না |
| পরিবর্তিত (modified) ফাইল | ✅ হ্যাঁ | ✅ হ্যাঁ | ✅ হ্যাঁ |
| মুছে ফেলা (deleted) ফাইল | ✅ হ্যাঁ | ✅ হ্যাঁ | ✅ হ্যাঁ |
| কার্যক্ষেত্র (scope) | বর্তমান ডিরেক্টরি ও নিচে | পুরো রিপোজিটরি | পুরো রিপোজিটরি |
সংক্ষেপে: প্রজেক্টের root ফোল্ডার থেকে চালালে git add . এবং git add -A কার্যত একই ফলাফল দেয়। পার্থক্য দেখা যায় সাবফোল্ডার থেকে চালালে — . শুধু সেই ফোল্ডারের নিচে কাজ করে, -A পুরো রিপোজিটরিতে।