📜 JavaScript Fundamentals
Git and GitHub for Beginners

গিট এবং গিটহাব: একেবারে শুরু থেকে

ডেভেলপার হিসেবে আমাদের অন্যতম একটি বড় কাজ হলো কোড লেখা। কিন্তু শুধু কোড লিখলেই তো হয় না, সেই কোডের বিভিন্ন ভার্সন ম্যানেজ করা, টিমের সাথে মিলে কাজ করা, কোনো ভুল হলে আগের ভার্সনে ফিরে যাওয়া—এই সবকিছুর জন্য আমাদের একজন বিশ্বস্ত বন্ধুর প্রয়োজন হয়। আর সেই বন্ধুর নামই হলো গিট (Git)

চলুন, আজ থেকে আমরা এই দারুণ টুলটি সম্পর্কে জানব। একদম সহজ ভাষায়, কোনো জটিলতা ছাড়াই।

গিট জিনিসটা আসলে কী? কেন দরকার?

ধরুন, আপনি একটি গেম খেলছেন। প্রতিটি লেভেল পার করার পর আপনি গেমটি সেভ করেন, তাই না? কেন করেন? যেন পরে যদি কোনো লেভেলে গিয়ে আটকে যান বা গেম ওভার হয়ে যায়, তাহলে আগের সেভ করা জায়গা থেকে আবার শুরু করতে পারেন।

গিট ঠিক এই কাজটাই করে আপনার কোডের জন্য। এটি একটি ভার্সন কন্ট্রোল সিস্টেম (Version Control System)। এর সাহায্যে আপনি আপনার প্রজেক্টের যেকোনো মুহূর্তকে একটি ভার্সন হিসেবে মার্ক বা সেভ করে রাখতে পারেন। পরে যখনই দরকার হবে, আপনি এক ভার্সন থেকে অন্য যেকোনো ভার্সনে সহজেই ফিরে যেতে পারবেন । উইন্ডোজ বা অন্য অপারেটিং সিস্টেমে ডিফল্টভাবে এমন কোনো শক্তিশালী টুল থাকে না।

শুরু করার আগে তিনটি জরুরি টার্ম

গিট নিয়ে কাজ করার আগে আমাদের তিনটি টার্ম মনে রাখতে হবে । এগুলো খুবই সহজ:

  1. ওয়ার্কিং ডিরেক্টরি (Working Directory): এটা হলো আপনার প্রজেক্ট ফোল্ডার, যেখানে আপনি বর্তমানে কাজ করছেন এবং আপনার ফাইলগুলো আছে।
  2. লোকাল রিপোজিটরি (Local Repository): এটি আপনার কম্পিউটারে থাকা গিটের একটি ডেটাবেস, যেখানে গিট আপনার প্রজেক্টের সমস্ত ভার্সনের ইতিহাস (history) সেভ করে রাখে।
  3. রিমোট রিপোজিটরি (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 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 এ যোগ করে একটি নতুন কমিট করে দিন।


গিটহাব: একসাথে কাজ করার শক্তি

প্রথম দুই পর্বে আমরা আমাদের নিজের কম্পিউটারে (লোকাল রিপোজিটরি) গিট ব্যবহার করা শিখেছি। কিন্তু সফটওয়্যার ডেভেলপমেন্ট একা করার কাজ নয়। আমাদের টিমের সাথে কোড শেয়ার করতে হয়, অন্যদের প্রজেক্টে কন্ট্রিবিউট করতে হয়। আর এখানেই আসে গিটহাব (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 ফাইল অন্যদের আপনার প্রজেক্ট বুঝতে অনেক সাহায্য করে।

তাই আজই নিজের একটি প্রজেক্ট তৈরি করে গিট ব্যবহার শুরু করে দিন!


© 2025 React JS Bangla Tutorial.