গিট এবং গিটহাব: একেবারে শুরু থেকে
ডেভেলপার হিসেবে আমাদের অন্যতম একটি বড় কাজ হলো কোড লেখা। কিন্তু শুধু কোড লিখলেই তো হয় না, সেই কোডের বিভিন্ন ভার্সন ম্যানেজ করা, টিমের সাথে মিলে কাজ করা, কোনো ভুল হলে আগের ভার্সনে ফিরে যাওয়া—এই সবকিছুর জন্য আমাদের একজন বিশ্বস্ত বন্ধুর প্রয়োজন হয়। আর সেই বন্ধুর নামই হলো গিট (Git)।
চলুন, আজ থেকে আমরা এই দারুণ টুলটি সম্পর্কে জানব। একদম সহজ ভাষায়, কোনো জটিলতা ছাড়াই।
গিট জিনিসটা আসলে কী? কেন দরকার?
ধরুন, আপনি একটি গেম খেলছেন। প্রতিটি লেভেল পার করার পর আপনি গেমটি সেভ করেন, তাই না? কেন করেন? যেন পরে যদি কোনো লেভেলে গিয়ে আটকে যান বা গেম ওভার হয়ে যায়, তাহলে আগের সেভ করা জায়গা থেকে আবার শুরু করতে পারেন।
গিট ঠিক এই কাজটাই করে আপনার কোডের জন্য। এটি একটি ভার্সন কন্ট্রোল সিস্টেম (Version Control System)। এর সাহায্যে আপনি আপনার প্রজেক্টের যেকোনো মুহূর্তকে একটি ভার্সন হিসেবে মার্ক বা সেভ করে রাখতে পারেন। পরে যখনই দরকার হবে, আপনি এক ভার্সন থেকে অন্য যেকোনো ভার্সনে সহজেই ফিরে যেতে পারবেন । উইন্ডোজ বা অন্য অপারেটিং সিস্টেমে ডিফল্টভাবে এমন কোনো শক্তিশালী টুল থাকে না।
শুরু করার আগে তিনটি জরুরি টার্ম
গিট নিয়ে কাজ করার আগে আমাদের তিনটি টার্ম মনে রাখতে হবে । এগুলো খুবই সহজ:
- ওয়ার্কিং ডিরেক্টরি (Working Directory): এটা হলো আপনার প্রজেক্ট ফোল্ডার, যেখানে আপনি বর্তমানে কাজ করছেন এবং আপনার ফাইলগুলো আছে।
- লোকাল রিপোজিটরি (Local Repository): এটি আপনার কম্পিউটারে থাকা গিটের একটি ডেটাবেস, যেখানে গিট আপনার প্রজেক্টের সমস্ত ভার্সনের ইতিহাস (history) সেভ করে রাখে।
- রিমোট রিপোজিটরি (Remote Repository): এটি হলো ইন্টারনেটে বা কোনো ক্লাউড সার্ভারে (যেমন: গিটহাব) থাকা আপনার প্রজেক্টের রিপোজিটরি । এর মাধ্যমে আপনি আপনার কোড অনলাইনে সেভ রাখতে এবং অন্যদের সাথে শেয়ার করতে পারেন।
প্রথম ধাপ: গিট ইনস্টলেশন এবং কনফিগারেশন
ইনস্টলেশন: প্রথমে আপনাকে গিট ইনস্টল করতে হবে। ইনস্টল করার সময় দুটি অপশন অবশ্যই সিলেক্ট করে নেবেন:
- Add a Git Bash Profile to Windows Terminal
- Override the default branch name for new repositories (এখানে
mainসিলেক্ট করুন)
কনফিগারেশন: ইনস্টলেশন শেষ হলে, আপনাকে নিজের পরিচয়টা গিটকে জানিয়ে দিতে হবে। অর্থাৎ, আপনার নাম এবং ইমেইল অ্যাড্রেস সেট করতে হবে। কারণ, আপনি যখন কোনো পরিবর্তন সেভ করবেন, গিট আপনার নামেই সেটা রেকর্ড করে রাখবে।
এই কমান্ডগুলো টার্মিনালে (Git Bash) চালান:
- নাম সেট করার জন্য:
git config --global user.name "Your Name" - ইমেইল সেট করার জন্য:
git config --global user.email "your.email@example.com"
আপনি সব কনফিগারেশন দেখতে চাইলে git config --list কমান্ডটি ব্যবহার করতে পারেন।
আপনার প্রথম লোকাল রিপোজিটরি
এবার চলুন, আমাদের প্রথম রিপোজিটরি বা সংক্ষেপে 'রিপো' তৈরি করি।
১. ফোল্ডার তৈরি ও ইনিশিয়ালাইজ: প্রথমে আপনার কম্পিউটারে একটি ফোল্ডার তৈরি করুন। এরপর টার্মিনাল খুলে সেই ফোল্ডারের ভেতরে যান এবং নিচের কমান্ডটি চালান:
git init
এই কমান্ডটি ওই ফোল্ডারে একটি লোকাল রিপোজিটরি তৈরি করবে। এখন থেকে গিট এই ফোল্ডারটিকে ট্র্যাক করা শুরু করবে ।
২. বর্তমান অবস্থা চেক করা: আপনার ওয়ার্কিং ডিরেক্টরির বর্তমান অবস্থা কী, তা দেখতে git status কমান্ডটি ব্যবহার করুন । বিগিনার হিসেবে এই কমান্ডটি বার বার ব্যবহার করার অভ্যাস গড়ে তুলুন ।
৩. ফাইল তৈরি ও স্টেজিং: এবার ফোল্ডারে একটি ফাইল তৈরি করুন (যেমন: readme.md)। ফাইলটি তৈরি করার পর git status দিলে দেখবেন, গিট একে "untracked" হিসেবে দেখাচ্ছে।
গিটকে এই ফাইলটি ট্র্যাক করার কথা বলতে, অর্থাৎ ফাইলটিকে স্টেজিং এরিয়াতে নিতে, এই কমান্ডটি ব্যবহার করুন:
git add readme.md
(যদি একাধিক ফাইল অ্যাড করতে চান, তাহলে git add . কমান্ড ব্যবহার করতে পারেন)।
৪. কমিট করা (ভার্সন সেভ করা): ফাইল স্টেজিংয়ে নেওয়ার পর, আপনাকে পরিবর্তনগুলো সেভ করতে হবে। একে বলা হয় কমিট (Commit) করা। কমিট করার সময় একটি মেসেজ দিতে হয়, যাতে পরে বোঝা যায় এই কমিটে আপনি কী কী পরিবর্তন করেছিলেন ।
git commit -m "My first commit"
এই মেসেজটি অনেকটা ডায়েরি লেখার মতো। গিট এই মেসেজ সহ আপনার পরিবর্তনগুলো তার ইতিহাসে লিখে রাখবে ।
ইতিহাস দেখা এবং অতীতে ফিরে যাওয়া
আপনি আপনার প্রজেক্টে যতগুলো কমিট করেছেন, তার সব ইতিহাস দেখতে পারেন।
- সব কমিট বিস্তারিত দেখা:
git log - সংক্ষেপে এক লাইনে দেখা:
git log --oneline
কখনো যদি মনে হয়, আপনি কোনো ভুল করে ফেলেছেন এবং আগের কোনো ভার্সনে ফিরে যেতে চান, তাহলে গিট আপনাকে সেই সুযোগও দেবে।
প্রথমে git log --oneline দিয়ে আপনার কমিটগুলোর আইডি দেখে নিন। এরপর যে কমিটে ফিরে যেতে চান, তার আইডি কপি করে নিচের কমান্ডটি চালান:
git reset --hard <commit_id>
🔹 Git Reset এবং নতুন ফাইল মুছে ফেলার নিয়ম
Git ব্যবহার করার সময় অনেক সময় আমরা চাই একটি নির্দিষ্ট কমিটে ফিরে যেতে এবং লোকালিতে তৈরি হওয়া নতুন ফাইল বা ফোল্ডার মুছে ফেলতে। এর জন্য দুইটি কমান্ড ব্যবহার করতে হয়:
১. git reset --hard <commit-hash>
এই কমান্ড দিয়ে আমরা আমাদের প্রজেক্টকে একটি নির্দিষ্ট কমিটে রিসেট করতে পারি।
git reset --hard 3ce203b13867c5c83b826c1a53ab461df2a05825কাজ কী করে?
- যেই কমিটের হ্যাশ (
commit-hash) দেওয়া হবে, প্রজেক্ট সেই অবস্থায় ফিরে যাবে। - ট্র্যাক করা (Git-এ আগে থেকেই যোগ করা) ফাইলগুলো সেই কমিটের মতো হয়ে যাবে।
- আগের পরিবর্তন (যা কমিট করা হয়নি) সেগুলো মুছে যাবে।
👉 তবে খেয়াল রাখতে হবে, এই কমান্ড লোকালিতে নতুন করে তৈরি করা ফাইল (যা Git কখনও ট্র্যাক করেনি) সেগুলো ডিলিট করবে না।
২. git clean -fd
নতুন তৈরি (untracked) ফাইল বা ফোল্ডার মুছে ফেলার জন্য এই কমান্ড ব্যবহার হয়।
git clean -fdঅপশন ব্যাখ্যা:
-f→ force, মানে জোর করে মুছে দেবে (Git অনুমতি ছাড়া untracked ফাইল ডিলিট করে না)।-d→ untracked ডিরেক্টরি/ফোল্ডার ও ডিলিট করবে।
সতর্কতা ⚠️
এই কমান্ড চালালে নতুন তৈরি ফাইল বা ফোল্ডার স্থায়ীভাবে মুছে যাবে, পরে আর ফেরত আনা যাবে না (যদি ব্যাকআপ না থাকে)।
৩. প্রিভিউ দেখার জন্য (Safe Mode)
আপনি যদি আগে দেখতে চান কোন ফাইল মুছে যাবে, তাহলে নিচের কমান্ড দিন:
git clean -nd- এখানে
-nমানে → শুধু দেখাবে কোন ফাইল মুছে যাবে, কিন্তু আসলে মুছে ফেলবে না। - তারপর নিশ্চিত হলে
git clean -fdচালান।
🔹 চূড়ান্ত ধাপ (Sequence)
১. নির্দিষ্ট কমিটে ফিরে যেতে:
git reset --hard <commit-hash>২. নতুন ফাইল/ফোল্ডার মুছে ফেলতে:
git clean -fd👉 তাহলে প্রজেক্ট সম্পূর্ণভাবে সেই কমিটের অবস্থায় ফিরে যাবে।
🧠 Git Stash কী?
ধরো তুমি React প্রজেক্টে কাজ করছো — তুমি কিছু কোড লিখছো, কিন্তু হঠাৎ অন্য একটি ব্রাঞ্চে (branch) যেতে হবে। তবে তোমার বর্তমান কোড এখনো কমিট করার মতো অবস্থায় নেই।
👉 এই অবস্থায় git stash তোমার কোড অস্থায়ীভাবে সংরক্ষণ করে রাখে —
যাতে তুমি অন্য ব্রাঞ্চে যেতে পারো এবং পরে ফিরে এসে সেই পরিবর্তনগুলো ফিরিয়ে নিতে পারো।
⚙️ Git Stash এর ব্যবহার ধাপে ধাপে
1️⃣ পরিবর্তনগুলো stash করা
git stash👉 এটি তোমার কাজের সব uncommitted changes সাময়িকভাবে সেভ করে রাখবে। এখন তোমার ওয়ার্কিং ডিরেক্টরি একদম পরিষ্কার (clean) হয়ে যাবে।
2️⃣ নির্দিষ্ট মেসেজসহ stash করা
git stash push -m "Navbar design updated"👉 এতে করে তুমি বুঝতে পারবে কোন stash-এ কী পরিবর্তন ছিল।
3️⃣ সব stash দেখা
git stash list🪣 এটি দেখাবে তুমি কতগুলো stash সংরক্ষণ করেছো। যেমন:
stash@{0}: On main: Navbar design updated
stash@{1}: On main: Added login form UI4️⃣ stash আবার প্রয়োগ করা
git stash apply👉 এটি সর্বশেষ stash (stash@{0}) প্রয়োগ করবে।
তুমি নির্দিষ্ট একটি stash-ও প্রয়োগ করতে পারো:
git stash apply stash@{1}5️⃣ stash প্রয়োগ করে মুছে ফেলা
git stash pop👉 এটি stash প্রয়োগ করে সেটিকে list থেকে মুছে দেবে। (সাধারণত এই কমান্ডটাই বেশি ব্যবহৃত হয়।)
6️⃣ stash ডিলিট করা
git stash drop stash@{0}👉 নির্দিষ্ট একটি stash মুছে ফেলবে।
সবগুলো একসাথে মুছতে:
git stash clear🧩 React প্রজেক্টে সাধারণ ব্যবহারিক উদাহরণ
ধরো তুমি Navbar.jsx এ কাজ করছো এবং হঠাৎ login-page ব্রাঞ্চে যেতে হবে:
# কাজ চলছে, কিন্তু কমিট করনি
git stash push -m "Navbar partial update"
git checkout login-pageকাজ শেষে আবার মেইন ব্রাঞ্চে ফিরে এসে:
git checkout main
git stash popএখন তোমার আগের পরিবর্তনগুলো ফিরে এসেছে! 🎉
🧾 সংক্ষেপে মনে রাখো
| কাজ | কমান্ড |
|---|---|
| Stash তৈরি | git stash |
| মেসেজসহ Stash | git stash push -m "message" |
| সব Stash দেখা | git stash list |
| Stash প্রয়োগ | git stash apply |
| প্রয়োগ + মুছে ফেলা | git stash pop |
| নির্দিষ্ট Stash মুছা | git stash drop stash@{n} |
| সব Stash মুছা | git stash clear |
*** Multiple Remote URL এ (মাল্টিপল রিপোতে) কোড পুশ করার নিয়ম
ব্রাঞ্চ কী এবং কেন এত জরুরি?
ভাবুন তো, আপনি আপনার প্রজেক্টের মূল কোড ঠিক রেখে একটি নতুন ফিচার নিয়ে কাজ করতে চান। কিন্তু নতুন ফিচারটি তৈরি করার সময় যদি মূল কোডে কোনো সমস্যা হয়? অথবা একই সময়ে যদি অন্য কোনো ডেভেলপার আরেকটি ফিচার নিয়ে কাজ করে?
এই সমস্যার সমাধান হলো ব্রাঞ্চ। ব্রাঞ্চ হলো আপনার প্রজেক্টের মূল লাইন থেকে বের হওয়া একটি প্যারালাল বা সমান্তরাল লাইন, যেখানে আপনি মূল কোডকে প্রভাবিত না করে নতুন ফিচার বা এক্সপেরিমেন্টের কাজ করতে পারেন।
কিছু জরুরি ব্রাঞ্চ কমান্ড:
- সব ব্রাঞ্চের তালিকা দেখা:
git branchবাgit branch --list - নতুন ব্রাঞ্চ তৈরি করা:
git branch <branch_name>(যেমন:git branch new-feature) - অন্য ব্রাঞ্চে যাওয়া:
git switch <branch_name>(যেমন:git switch new-feature) - ব্রাঞ্চের নাম পরিবর্তন করা:
git branch -m <new_name> - ব্রাঞ্চ ডিলিট করা:
git branch -d <branch_name>(তবে কমিট না করা ব্রাঞ্চ ডিলিট করতে-Dব্যবহার করতে হয়)
ব্রাঞ্চের কোড মূল প্রজেক্টে আনা: মার্জ (Merge)
আপনি একটি নতুন ব্রাঞ্চে নতুন ফিচার তৈরি করে ফেলেছেন। এখন সেই কোডটি তো মূল ব্রাঞ্চে (সাধারণত main ব্রাঞ্চে) নিয়ে আসতে হবে, তাই না? এই প্রক্রিয়াকে বলা হয় মার্জ (Merge) করা।
১. প্রথমে মূল ব্রাঞ্চে ফিরে আসুন: git switch main
২. এরপর যে ব্রাঞ্চের কোড মার্জ করতে চান, তার জন্য নিচের কমান্ডটি চালান:
git merge <branch_name> (যেমন: git merge new-feature)
মার্জ কনফ্লিক্ট: যখন ঝগড়া লাগে!
মাঝে মাঝে এমন হতে পারে যে, দুটি ভিন্ন ব্রাঞ্চে একই ফাইলের একই লাইনে ভিন্ন ভিন্ন পরিবর্তন করা হয়েছে । যখন আপনি এই ব্রাঞ্চ দুটিকে মার্জ করার চেষ্টা করবেন, গিট দ্বিধায় পড়ে যাবে—কোন পরিবর্তনটি সে রাখবে? এই পরিস্থিতিকেই বলে মার্জ কনফ্লিক্ট (Merge Conflict)।
ভয় পাবেন না! এটা খুবই সাধারণ একটি ব্যাপার। কনফ্লিক্ট হলে গিট আপনাকে ফাইলের মধ্যেই <<<<<<< HEAD এবং >>>>>>> new-feature এই ধরনের কিছু চিহ্ন দিয়ে দেখিয়ে দেবে কোথায় সমস্যা হয়েছে।
সমাধান:
আপনাকে ফাইলটি খুলে এই চিহ্নগুলো ফেলে দিতে হবে এবং দুই ব্রাঞ্চের কোডের মধ্যে কোনটি আপনি রাখতে চান (বা দুটিই রাখতে চান কিনা) তা ঠিক করে ফাইলটি সেভ করতে হবে । এরপর স্বাভাবিক নিয়মে git add এবং git commit করলেই কনফ্লিক্ট সমাধান হয়ে যাবে।
কমিট না করে ব্রাঞ্চ বদলানো: git stash
ধরুন, আপনি একটি ব্রাঞ্চে কাজ করছেন, কিন্তু কাজ শেষ হয়নি, অর্থাৎ কমিট করার মতো অবস্থায় নেই। এমন সময় জরুরি ভিত্তিতে আপনাকে অন্য একটি ব্রাঞ্চে গিয়ে কিছু পরিবর্তন করতে হবে। এখন কী করবেন?
এর সমাধান হলো git stash। এই কমান্ডটি আপনার অসমাপ্ত কাজগুলোকে অস্থায়ীভাবে লুকিয়ে রাখে, ফলে আপনার ওয়ার্কিং ডিরেক্টরি পরিষ্কার হয়ে যায় এবং আপনি সহজেই ব্রাঞ্চ পরিবর্তন করতে পারেন ।
- কাজ লুকিয়ে রাখতে:
git stash - লুকিয়ে রাখা কাজের তালিকা দেখতে:
git stash list - কাজ ফিরিয়ে আনতে: আগের ব্রাঞ্চে ফিরে এসে
git stash popবাgit stash applyকমান্ড চালান ।
কিছু ফাইলকে উপেক্ষা করা: .gitignore
আমাদের প্রজেক্টে এমন অনেক ফাইল বা ফোল্ডার থাকতে পারে যা আমরা গিট দিয়ে ট্র্যাক করতে চাই না (যেমন: node_modules বা ব্যক্তিগত নোট)। এই ধরনের ফাইলগুলোকে উপেক্ষা করার জন্য প্রজেক্টের রুট ফোল্ডারে .gitignore নামে একটি ফাইল তৈরি করতে হয় ।
এই ফাইলের ভেতর আপনি যে ফাইল বা ফোল্ডারের নাম লিখে দেবেন, গিট সেগুলোকে ট্র্যাক করবে না।
যদি ভুল করে কোনো ফাইল কমিট করে ফেলেন?
যদি এমন কোনো ফাইল কমিট করে ফেলেন যা .gitignore এ থাকা উচিত ছিল, তাহলে নিচের কমান্ডটি ব্যবহার করে সেটিকে আনট্র্যাক করতে পারেন:
git rm --cached <file_name>
এই কমান্ডটি ফাইলটিকে রিপোজিটরি থেকে মুছে দেবে, কিন্তু আপনার ওয়ার্কিং ডিরেক্টরিতে রেখে দেবে। এরপর ফাইলটির নাম .gitignore এ যোগ করে একটি নতুন কমিট করে দিন।
main ব্রাঞ্চে কাজ করা বনাম আলাদা ব্রাঞ্চে কাজ করা
— এই জিনিসটাই প্রজেক্টে ভালো কোড ম্যানেজমেন্টের মূল চাবিকাঠি। চলুন খুব সহজ, বাস্তব উদাহরণে বুঝি 👇
🧩 প্রথমে পার্থক্যটা দেখি
| বিষয় | main ব্রাঞ্চে কাজ করা | নিজের ব্রাঞ্চে (যেমন mojnu/homepage) কাজ করা |
|---|---|---|
| উদ্দেশ্য | সরাসরি লাইভ বা মূল কোডে কাজ করা | নিজের নির্দিষ্ট ফিচার/পরিবর্তন আলাদা করে রাখা |
| ঝুঁকি | ভুল হলে main নষ্ট হতে পারে 😬 | ভুল হলেও main নিরাপদ থাকে ✅ |
| টিমওয়ার্কে সুবিধা | কম (সবাই main এ কাজ করলে কনফ্লিক্ট হয়) | বেশি (প্রতিজন নিজের ব্রাঞ্চে কাজ করে) |
| কোড রিভিউ / Pull Request | করা যায় না (কারণ সব main এ চলে গেছে) | সহজে করা যায়, মার্জ করার আগে দেখা যায় |
| GitHub History / PR Tracking | একদম মিশে যায় | পরিষ্কারভাবে দেখা যায় কে কী করেছে |
| ভালো প্র্যাকটিস? | ❌ না (শুধু ছোট, নিজের প্রজেক্টে চালবে) | ✅ হ্যাঁ (প্রফেশনাল ও সেফ পদ্ধতি) |
একদম ঠিক বুঝেছেন Mojnu bhai ❤️
এখন যেই অবস্থা বলেছেন —
আপনার নতুন কোড আছে main ব্রাঞ্চে,
কিন্তু আপনি চান সেই কোডগুলো চলে যাক mojnu/homepage ব্রাঞ্চে।
চলুন ধাপে ধাপে দেখি — খুব সহজভাবে 👇
🧭 অবস্থা এখন
- ✅
mainব্রাঞ্চে: নতুন কোড আছে (আপনি কাজ করেছেন + commit করেছেন) - 🚫
mojnu/homepageব্রাঞ্চে: পুরনো কোড আছে - ❌ GitHub এ এখনো push করেন নাই
আপনার লক্ষ্য ➜
main থেকে আপডেট করা কোডগুলো mojnu/homepage এ নিয়ে যাওয়া
নতুন অবস্থায় ব্রাঞ্চ ম্যানেজমেন্টে যে ভুল হতে পারে
🥇 Step 1: আপনি এখন কোন ব্রাঞ্চে আছেন দেখুন
git branch👉 যদি দেখেন * main আছে, তাহলে ঠিক আছে।
(মানে আপনি main ব্রাঞ্চে আছেন।)
🥈 Step 2: এখন mojnu/homepage ব্রাঞ্চে সুইচ করুন
কিন্তু যদি mojnu/homepage-এ পুরনো কোড থাকে,
আর আপনি নতুন কোড main থেকে নিতে চান,
তাহলে দুইভাবে করা যায়।
🔹 Option 1 (সবচেয়ে নিরাপদ ও প্রফেশনাল)
👉 main থেকে mojnu/homepage ব্রাঞ্চে merge করুন।
git switch mojnu/homepage
git merge main➡️ এটা মানে: “main ব্রাঞ্চের সব নতুন কোড mojnu/homepage এ ঢুকিয়ে দাও।”
👉 তারপর push করুন:
git push origin mojnu/homepage✅ এখন mojnu/homepage ব্রাঞ্চেও সব নতুন কোড চলে আসবে।
✅ আর main থাকবে আগের মতোই।
🔹 Option 2 (যদি আপনি চান mojnu/homepage পুরোপুরি main-এর মতো হোক)
মানে আপনি পুরনো mojnu/homepage-এর কোড রাখতে চান না — শুধু main-এর নতুন কোড চান।
তাহলে করুন 👇
git switch mojnu/homepage
git reset --hard main
git push origin mojnu/homepage --force➡️ এটি mojnu/homepage ব্রাঞ্চকে পুরোপুরি main ব্রাঞ্চের কপি বানিয়ে দেবে।
⚠️ সতর্কতা: আগের mojnu/homepage ব্রাঞ্চের কোড পুরো মুছে যাবে, তাই এটা করুন তখনই যখন আপনি নিশ্চিত যে আগেরটা দরকার নেই।
🎯 সংক্ষেপে
| আপনি কী চান | কী করবেন |
|---|---|
| mojnu/homepage-এ main-এর নতুন কোড মার্জ করতে চান | git merge main |
| mojnu/homepage পুরোপুরি main-এর মতো করতে চান | git reset --hard main |
🧠 সহজভাবে বুঝুন (বাংলা উদাহরণে)
ধরুন আপনার প্রজেক্টটা একটা “ক্লাস এক্টিভিটি ওয়েবসাইট”।
mainব্রাঞ্চ = লাইভ প্রজেক্টের কোডmojnu/homepageব্রাঞ্চ = আপনার নতুন homepage ডিজাইন চেঞ্জ করার জায়গা
আপনি যদি সরাসরি main ব্রাঞ্চে কোড লিখেন:
👉 তাহলে আপনি যা করছেন, সেটাই সরাসরি লাইভ কোডে ঢুকে যাবে —
ভুল হলে পুরো প্রজেক্টেই প্রভাব ফেলতে পারে।
কিন্তু যদি আপনি mojnu/homepage ব্রাঞ্চে কাজ করেন:
👉 আপনি নিশ্চিন্তে কোড লিখতে পারবেন, টেস্ট করতে পারবেন,
👉 তারপর GitHub-এ Pull Request দিয়ে মার্জ করলে তবেই main আপডেট হবে।
✅ এতে main সবসময় পরিষ্কার ও স্টেবল (bug-free) থাকে।
🧩 সুতরাং ভালো প্র্যাকটিস কী?
🔹 ছোট একক প্রজেক্ট (আপনার নিজের, টেস্ট করার জন্য):
→ সরাসরি main এ কাজ করা ঠিক আছে।
(যেহেতু আপনি একাই কাজ করছেন, অন্য কেউ main-এ কিছু মারবে না।)
🔹 টিম প্রজেক্ট বা সিরিয়াস প্রজেক্ট (GitHub রিপো সহ):
→ সবসময় নিজের আলাদা ব্রাঞ্চে কাজ করুন (যেমন mojnu/homepage, feature/login, bugfix/navbar)
→ কাজ শেষে Pull Request দিয়ে main-এ merge করুন।
এটাই Professional Workflow ✅ সব বড় কোম্পানি (Google, Meta, GitHub, ইত্যাদি) এইভাবে কাজ করে।
🎯 সারাংশ
| প্রজেক্ট টাইপ | করণীয় |
|---|---|
| নিজের শেখার বা ছোট প্রজেক্ট | সরাসরি main এ কাজ করা যায় |
| টিম প্রজেক্ট / GitHub Collaboration | সবসময় নতুন ব্রাঞ্চে কাজ করুন |
| নতুন ফিচার / বড় পরিবর্তন | আলাদা ব্রাঞ্চে কাজ করুন, পরে main-এ মার্জ করুন |
👉 Bottom line: আপনি যদি ভবিষ্যতে বড় ডেভেলপার বা টিমে কাজ করতে চান, সবসময় নিজের ব্রাঞ্চে কাজ করাই ভালো প্র্যাকটিস। main থাকবে শুধু “final stable” কোডের জন্য।
গিটহাব: একসাথে কাজ করার শক্তি
প্রথম দুই পর্বে আমরা আমাদের নিজের কম্পিউটারে (লোকাল রিপোজিটরি) গিট ব্যবহার করা শিখেছি। কিন্তু সফটওয়্যার ডেভেলপমেন্ট একা করার কাজ নয়। আমাদের টিমের সাথে কোড শেয়ার করতে হয়, অন্যদের প্রজেক্টে কন্ট্রিবিউট করতে হয়। আর এখানেই আসে গিটহাব (GitHub)।
গিটহাব কী? গিট এবং গিটহাব কি এক?
সহজ কথায়, গিট হলো একটি টুল (সফটওয়্যার), আর গিটহাব হলো সেই টুলের জন্য একটি অনলাইন হোস্টিং সার্ভিস । গিটহাব আপনার লোকাল রিপোজিটরিগুলোকে ক্লাউডে সেভ করে রাখে, যাতে আপনি যেকোনো জায়গা থেকে তা অ্যাক্সেস করতে পারেন এবং অন্যদের সাথে কোলাবরেট করতে পারেন।
লোকাল থেকে রিমোটে: push এবং pull
আপনার লোকাল কম্পিউটারের কোড গিটহাবে পাঠানোর প্রক্রিয়াকে বলে পুশ (Push) করা।
git push origin <branch_name>
এই কমান্ডটি আপনার নির্দিষ্ট ব্রাঞ্চের সমস্ত কমিটকে origin (যা সাধারণত আপনার গিটহাব রিপোজিটরির ঠিকানা) নামের রিমোট রিপোজিটরিতে পাঠিয়ে দেবে।
ঠিক একইভাবে, রিমোট রিপোজিটরিতে যদি কোনো নতুন পরিবর্তন আসে (যেমন: আপনার টিমের অন্য কেউ কোড পুশ করেছে), সেই পরিবর্তন আপনার লোকাল মেশিনে নামিয়ে আনার প্রক্রিয়াকে বলে পুল (Pull) করা।
git pull origin <branch_name>
কোলাবোরেশনের মূল ভিত্তি: পুল রিকোয়েস্ট (Pull Request)
গিটহাবে একসাথে কাজ করার সবচেয়ে গুরুত্বপূর্ণ অংশ হলো পুল রিকোয়েস্ট (Pull Request বা PR)।
ধরুন, আপনি একটি নতুন ফিচার new-feature ব্রাঞ্চে তৈরি করেছেন এবং সেটি main ব্রাঞ্চে মার্জ করতে চান। সরাসরি পুশ না করে, আপনি একটি পুল রিকোয়েস্ট তৈরি করবেন । এটি হলো main ব্রাঞ্চের মালিকের কাছে আপনার কোড মার্জ করার জন্য একটি আনুষ্ঠানিক অনুরোধ।
কিভাবে পুল রিকোয়েস্ট করে?
১. প্রথমে আপনার ফিচার ব্রাঞ্চটি গিটহাবে পুশ করুন: git push origin new-feature।
২. এবার গিটহাবে আপনার রিপোজিটরিতে যান। আপনি একটি হলুদ নোটিফিকেশন দেখতে পাবেন, যেখানে "Compare & pull request" নামে একটি বাটন থাকবে । সেখানে ক্লিক করুন।
৩. একটি শিরোনাম ও বর্ণনা লিখুন, যেখানে আপনি ব্যাখ্যা করবেন যে এই ব্রাঞ্চে কী কী পরিবর্তন করা হয়েছে।
৪. "Create pull request" বাটনে ক্লিক করুন।
পুল রিকোয়েস্ট মার্জ করা: টিমের অন্য সদস্যরা আপনার পুল রিকোয়েস্ট রিভিউ করবে, কোড দেখবে এবং প্রয়োজনে কমেন্ট করবে। সবকিছু ঠিক থাকলে, রিপোজিটরির মালিক বা অ্যাডমিন "Merge pull request" বাটনে ক্লিক করে আপনার কোডটি মূল ব্রাঞ্চে মার্জ করে নেবেন ।
অন্যের প্রজেক্টে কন্ট্রিবিউট করা: ফর্ক (Fork) এবং আপസ്ട্রিমিং
আপনি যদি এমন কোনো প্রজেক্টে কন্ট্রিবিউট করতে চান যার মালিক আপনি নন (যেমন: কোনো ওপেন সোর্স প্রজেক্ট), তখন আপনাকে ফর্ক (Fork) করতে হবে।
ফর্ক করা মানে হলো অন্যের রিপোজিটরির একটি হুবহু কপি আপনার নিজের গিটহাব অ্যাকাউন্টে তৈরি করা ।
১. আপনি যে রিপোজিটরিতে কন্ট্রিবিউট করতে চান, সেটির গিটহাব পেজে গিয়ে উপরের ডানদিকে "Fork" বাটনে ক্লিক করুন।
২. এখন আপনার অ্যাকাউন্টে ওই রিপোজিটরির একটি কপি তৈরি হয়ে গেছে। এবার এটিকে আপনার লোকাল কম্পিউটারে clone করুন।
৩. পরিবর্তনগুলো করে নিজের ফর্ক করা রিপোজিটরিতে পুশ করুন।
৪. এরপর আপনার ফর্ক করা রিপোজিটরি থেকে মূল রিপোজিটরিতে (যাকে Upstream বলা হয়) একটি পুল রিকোয়েস্ট পাঠান ।
মূল প্রজেক্টের মেইন্টেইনাররা আপনার রিকোয়েস্ট রিভিউ করে মার্জ করে নিলে, আপনিও হয়ে যাবেন সেই প্রজেক্টের একজন কন্ট্রিবিউটর!
নিরাপদ কানেকশন: SSH
গিটহাবের সাথে আপনার লোকাল মেশিনকে কানেক্ট করার একটি নিরাপদ উপায় হলো SSH। এর জন্য আপনাকে একটি SSH কি-জেনারেট করতে হবে।
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
এই কমান্ডটি দুটি কি তৈরি করবে: একটি প্রাইভেট (id_rsa) এবং একটি পাবলিক (id_rsa.pub)। আপনাকে id_rsa.pub ফাইলের কন্টেন্ট কপি করে আপনার গিটহাব অ্যাকাউন্টের Settings > SSH and GPG keys সেকশনে যোগ করতে হবে। এরপর থেকে আপনি পাসওয়ার্ড ছাড়াই নিরাপদে কানেক্ট করতে পারবেন।
শেষ কথা: README ফাইলের গুরুত্ব
সবশেষে একটি জরুরি বিষয় হলো README.md ফাইল। এই ফাইলটি হলো আপনার প্রজেক্টের প্রবেশদ্বার। এখানে পরিষ্কারভাবে লেখা উচিত প্রজেক্টটি কী, কীভাবে এটি লোকাল মেশিনে রান করতে হবে এবং ব্যবহারের নিয়মাবলী কী কী । একটি ভালো README ফাইল অন্যদের আপনার প্রজেক্ট বুঝতে অনেক সাহায্য করে।
তাই আজই নিজের একটি প্রজেক্ট তৈরি করে গিট ব্যবহার শুরু করে দিন!