🗂️ Version Control কী এবং কেন ব্যবহার করবে?

প্রতিটি ডেভেলপারের সবচেয়ে গুরুত্বপূর্ণ টুল হলো Version Control System। এটি ছাড়া পেশাদার সফটওয়্যার ডেভেলপমেন্ট কল্পনাই করা যায় না।


🔷 What is Version Control? — Version Control কী?

Version Control System (VCS) হলো এমন একটি সিস্টেম যা সময়ের সাথে ফাইলের প্রতিটি পরিবর্তন রেকর্ড করে রাখে। ফলে তুমি যেকোনো সময় পুরনো যেকোনো সংস্করণে ফিরে যেতে পারো, কে কী পরিবর্তন করেছে দেখতে পারো, এবং একসাথে একাধিক মানুষ একই প্রজেক্টে কাজ করতে পারে কোনো ঝামেলা ছাড়াই।

সহজ ভাষায় বলতে গেলে — VCS হলো তোমার কোডের "Time Machine"। যেকোনো সময় অতীতে ফিরে যেতে পারবে, ভুলগুলো ঠিক করতে পারবে।

VCS ছাড়া ডেভেলপারদের কী হয়?

VCS শেখার আগে অধিকাংশ নতুন ডেভেলপার এই ভুলটি করেন:

my-project/ ├── index.html ├── index_backup.html ├── index_old.html ├── index_v2.html ├── index_final.html ├── index_FINAL_v2.html ├── index_FINAL_LAST.html ← 😅 এটাই কি আসল ফাইল? └── index_FINAL_LAST_copy.html ← নাকি এটা? style.css style_backup.css style_working.css ← কোনটা ব্যবহার করছি?
⚠️ VCS ছাড়া যে ৫টি বড় সমস্যা হয়:

১. ইতিহাস হারানো: কোড নষ্ট হলে বা ভুল হলে আগের অবস্থায় ফিরে যাওয়ার কোনো উপায় নেই।
২. দলগত বিশৃঙ্খলা: দুজন একই ফাইলে কাজ করলে একজনের কাজ অন্যজনের কাজ মুছে দেয়।
৩. Accountability নেই: কে কখন কী পরিবর্তন করেছে জানা যায় না।
৪. Backup নেই: কম্পিউটার নষ্ট হলে বা চুরি হলে সব কাজ শেষ।
৫. Experiment করতে ভয়: নতুন কিছু চেষ্টা করলে পুরনো কোড নষ্ট হওয়ার ভয় থাকে।

🔷 Why use Version Control? — কেন ব্যবহার করবে?

VCS শেখা একটি বিনিয়োগ — একবার শিখলে সারাজীবন উপকার পাবে। পেশাদার ডেভেলপমেন্টে VCS জানা অবশ্যক শর্ত।

সুবিধা বিবরণ বাস্তব উদাহরণ
ইতিহাস সংরক্ষণ প্রতিটি পরিবর্তন রেকর্ড হয়, যেকোনো সময় ফিরে যাওয়া যায় গতকালের কোডে ফিরে যেতে একটি কমান্ড
দলগত কাজ একসাথে ১০০ জনও একই প্রজেক্টে কাজ করতে পারে Alice header, Bob footer — কোনো conflict নেই
Online Backup GitHub-এ push করলে কোড চিরতরে নিরাপদ ল্যাপটপ চুরি হলেও কোড GitHub-এ থাকে
নিরাপদ Experiment Branch-এ পরীক্ষা করো, main কোড নিরাপদ নতুন design try করো, পছন্দ না হলে মুছে দাও
Code Review অন্যরা তোমার কোড পরীক্ষা করে comment দিতে পারে Pull Request → সিনিয়র দেখে approve করে
Bug Tracking কোন commit-এ bug এলো খুঁজে বের করা যায় git bisect দিয়ে bug-এর সময় খুঁজে পাও
Release Management নির্দিষ্ট version tag করে রাখা যায় v1.0, v2.0 — যেকোনো version deploy করো
পেশাদার পরিসংখ্যান: বিশ্বের শীর্ষ সব tech company — Google, Meta, Microsoft, Amazon — প্রত্যেকেই Git ব্যবহার করে। চাকরির interview-এ Git না জানলে প্রায়ই reject করা হয়। এটি শেখা optional নয়, অবশ্যক

🔷 Git vs Other VCS — তুলনামূলক আলোচনা

Version Control System দুই ধরনের — Centralized এবং Distributed। আজকের দুনিয়ায় Git (Distributed) সবচেয়ে জনপ্রিয়।

Centralized VCS (CVCS) পুরনো পদ্ধতি

একটি কেন্দ্রীয় সার্ভারে সব কোড থাকে। প্রত্যেক ডেভেলপার সেই সার্ভার থেকে কোড নামায় এবং সার্ভারে পাঠায়। SVN (Subversion) এবং CVS এই ধরনের VCS।

কেন্দ্রীয় সার্ভার (একমাত্র repository) ↑↓ ↑↓ ↑↓ Alice Bob Charlie (কাজ করে) (কাজ করে) (কাজ করে) সমস্যা: সার্ভার বন্ধ = কেউ কাজ করতে পারবে না! সমস্যা: ইন্টারনেট না থাকলে কিছুই করা যাবে না!

Distributed VCS (DVCS) আধুনিক পদ্ধতি

প্রতিটি ডেভেলপারের কম্পিউটারে সম্পূর্ণ repository থাকে। ইন্টারনেট ছাড়াও কাজ করা যায়। Git এবং Mercurial এই ধরনের।

GitHub (Remote/Cloud Backup) ↑↓ ↑↓ ↑↓ Alice Bob Charlie (সম্পূর্ণ (সম্পূর্ণ (সম্পূর্ণ repo আছে) repo আছে) repo আছে) সুবিধা: Offline-এ কাজ করা যায়! সুবিধা: যেকোনো কম্পিউটার থেকে full history দেখা যায়!
বিষয় Centralized (SVN) Distributed (Git)
Offline কাজ ❌ সম্ভব নয় ✅ সম্পূর্ণ সম্ভব
গতি ধীর (network-নির্ভর) দ্রুত (local)
History শুধু central server-এ সবার কম্পিউটারে
Branching ধীর ও জটিল দ্রুত ও সহজ
Backup একটি server নষ্ট = সব শেষ প্রত্যেকের কাছে copy আছে
জনপ্রিয়তা কমে যাচ্ছে বিশ্বে ৯৮%+ ডেভেলপার
সরাসরি কথা: ২০২৬ সালে Git শেখা মানে শিল্পের মানদণ্ড শেখা। SVN বা অন্য VCS শেখার কোনো দরকার নেই — সরাসরি Git দিয়ে শুরু করো।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🐙 Git পরিচিতি ও ইনস্টলেশন

Git কী, কীভাবে কাজ করে এবং তোমার কম্পিউটারে কীভাবে ইনস্টল করবে — সবকিছু এখানে।


🔷 What is Git? — Git কী?

Git হলো বিশ্বের সবচেয়ে জনপ্রিয় Distributed Version Control System। ২০০৫ সালে Linux-এর জনক Linus Torvalds মাত্র কয়েক সপ্তাহে এটি তৈরি করেছিলেন। আজ বিশ্বের ৯৮%+ ডেভেলপার Git ব্যবহার করেন।

Git তোমার প্রজেক্টের প্রতিটি পরিবর্তনের সম্পূর্ণ ইতিহাস রাখে। কে, কখন, কী পরিবর্তন করেছে এবং কেন করেছে — সব কিছু সংরক্ষিত থাকে।

Git ≠ GitHub:
Git = একটি সফটওয়্যার যা তোমার কম্পিউটারে চলে (Free, Open Source)
GitHub = একটি ওয়েবসাইট যেখানে Git repository online-এ রাখা যায় (Microsoft-এর owned)

Git ছাড়া GitHub চলে না, কিন্তু Git GitHub ছাড়াও একা কাজ করতে পারে।

Git-এর ইতিহাস — একটু গল্প

সাল ঘটনা
২০০৫ Linus Torvalds Linux kernel-এর জন্য Git তৈরি করেন। কারণ ছিল BitKeeper (তখনকার VCS) বিনামূল্যে ব্যবহারের অনুমতি বাতিল হয়ে যাওয়া।
২০০৮ GitHub চালু হয় — Git repository-র জন্য web-based platform।
২০১১ GitLab চালু হয় — self-hosted alternative।
২০১৮ Microsoft GitHub কিনে নেয় $7.5 billion ডলারে।
২০২৩+ GitHub-এ ১০০ মিলিয়নেরও বেশি ডেভেলপার। বিশ্বের সবচেয়ে বড় code hosting platform।

🔷 Installing Git Locally — Git ইনস্টল করা

Git তোমার অপারেটিং সিস্টেম অনুযায়ী আলাদাভাবে ইনস্টল করতে হয়। একবার ইনস্টল করলেই হয়, বারবার করতে হয় না।

Windows-এ ইনস্টল Windows

git-scm.com থেকে Windows installer ডাউনলোড করো। ইনস্টলের সময় সব ডিফল্ট option রেখে Next করতে থাকো। ইনস্টলের পর Git Bash নামে একটি terminal পাবে — এটিই ব্যবহার করবে।

ডাউনলোড: https://git-scm.com/download/win ইনস্টলের পর দুটো জিনিস পাবে: → Git Bash (Unix-style terminal — এটি ব্যবহার করো) → Git GUI (Graphical interface — optional) VS Code-এ Terminal খুলতে: Ctrl + ` (এটিও Git Bash হিসেবে কাজ করবে)

macOS-এ ইনস্টল macOS

# পদ্ধতি ১: Homebrew দিয়ে (সবচেয়ে সহজ) brew install git # পদ্ধতি ২: Xcode Command Line Tools xcode-select --install # (এতে Git সহ আসে) # পদ্ধতি ৩: Official installer # https://git-scm.com/download/mac

Linux-এ ইনস্টল Linux

# Ubuntu / Debian sudo apt update sudo apt install git # Fedora / RHEL sudo dnf install git # Arch Linux sudo pacman -S git

ইনস্টল যাচাই করো

# Terminal বা Git Bash খুলে লেখো: git --version # সফল হলে দেখাবে: git version 2.43.0 ✅ # এই আউটপুট দেখলে Git সফলভাবে ইনস্টল হয়েছে!
VS Code ব্যবহারকারীদের জন্য: VS Code-এ Git built-in আছে। Terminal-এ git কমান্ড চলবে। Source Control panel (Ctrl+Shift+G) দিয়ে graphical-ভাবেও Git ব্যবহার করা যায়। তবে command line শেখা জরুরি — এতে সব কিছু বোঝা যায়।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚙️ git config — প্রথমবারের Setup

Git ইনস্টলের পর একবার কনফিগার করতে হয়। এই তথ্য প্রতিটি commit-এ যোগ হয়।


🔷 Local vs Global Config — কনফিগারেশনের ধরন

Git কনফিগারেশন তিন স্তরে কাজ করে। উপরের স্তর নিচের স্তরকে override করে।

স্তর কোথায় সংরক্ষিত কখন প্রযোজ্য flag
System /etc/gitconfig কম্পিউটারের সব user-এ --system
Global ~/.gitconfig তোমার সব প্রজেক্টে --global
Local .git/config শুধু এই একটি প্রজেক্টে (default)
সাধারণত --global ব্যবহার করো — এতে একবার সেট করলেই তোমার কম্পিউটারের সব প্রজেক্টে কাজ করবে। ভিন্ন প্রজেক্টে ভিন্ন নাম/ইমেইল দরকার হলে সেই ফোল্ডারে গিয়ে --local দিয়ে সেট করো।

🔷 Repository Initialization ও প্রথমবারের Config

নাম ও ইমেইল সেট করো অবশ্যই করতে হবে

প্রতিটি commit-এ author-এর নাম ও ইমেইল সংরক্ষিত হয়। GitHub-এর যে ইমেইল ব্যবহার করবে সেটাই এখানে দাও।

# নাম সেট করো git config --global user.name "তোমার পুরো নাম" # ইমেইল সেট করো (GitHub-এর ইমেইল দাও) git config --global user.email "email@example.com"

অন্যান্য গুরুত্বপূর্ণ Config দরকারি

# Default branch-এর নাম 'main' করো (modern standard) git config --global init.defaultBranch main # রঙিন output-এর জন্য (terminal সুন্দর দেখাবে) git config --global color.ui auto # Default editor VS Code করো git config --global core.editor "code --wait" # Windows-এ line ending সমস্যা এড়াতে git config --global core.autocrlf true # macOS/Linux-এ git config --global core.autocrlf input # Push এর সময় current branch-ই push হোক git config --global push.default current

Aliases — সময় বাঁচানোর শর্টকাট

বারবার একই লম্বা কমান্ড টাইপ করতে হয়। Alias হলো সেই কমান্ডের ছোট ডাকনাম। একবার তৈরি করো, সারাজীবন সময় বাঁচাও।

# সংক্ষিপ্ত কমান্ড তৈরি করো git config --global alias.st status git config --global alias.co checkout git config --global alias.br branch git config --global alias.lg "log --oneline --graph --decorate --all" git config --global alias.last "log -1 HEAD --stat" git config --global alias.unstage "restore --staged" # ব্যবহার: git st # → git status git co main # → git checkout main git br # → git branch git lg # → সুন্দর tree-style log git last # → শেষ commit-এর বিবরণ git unstage . # → সব unstage করো

সব Config দেখো ও যাচাই করো

# সব config দেখো git config --list # নির্দিষ্ট config দেখো git config user.name git config user.email # config ফাইল সরাসরি দেখো/সম্পাদনা করো cat ~/.gitconfig # আউটপুট উদাহরণ: [user] name = ফরীদুর রহমান email = farid@example.com [init] defaultBranch = main [color] ui = auto [alias] st = status co = checkout

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📁 What is a Repository — Repository তৈরি

Repository হলো তোমার প্রজেক্টের সম্পূর্ণ ইতিহাস সহ সব ফাইলের ভান্ডার।


🔷 What is a Repository? — Repository কী?

Repository (সংক্ষেপে repo) হলো একটি বিশেষ ফোল্ডার যেখানে তোমার প্রজেক্টের সব ফাইল এবং সেই ফাইলগুলোর সম্পূর্ণ পরিবর্তনের ইতিহাস সংরক্ষিত থাকে। প্রতিটি repository-র ভেতরে একটি লুকানো .git ফোল্ডার থাকে। এই .git ফোল্ডারটিই হলো আসল repository — এখানেই সব তথ্য জমা থাকে।

my-website/ ← এটি তোমার প্রজেক্ট ফোল্ডার ├── .git/ ← 🔒 Git-এর তথ্যভান্ডার (কখনো মুছবে না!) │ ├── HEAD ← বর্তমান branch কোনটি │ ├── config ← এই repo-র local config │ ├── objects/ ← সব commit, file data এখানে │ └── refs/ │ ├── heads/ ← সব local branch │ └── tags/ ← সব tag ├── index.html ├── style.css └── script.js
⚠️ .git ফোল্ডার কখনো মুছবে না! এই ফোল্ডারটি মুছে ফেললে সব commit history, branch, tag — সব চলে যাবে। প্রজেক্ট ফোল্ডার থাকবে কিন্তু Git আর কাজ করবে না।

দুই ধরনের Repository

ধরন কোথায়? কীভাবে তৈরি? কাজ
Local Repository তোমার কম্পিউটারে git init Local-এ কাজ করা
Remote Repository GitHub/GitLab সার্ভারে GitHub-এ তৈরি করে git clone Backup ও দলগত কাজ

🔷 git init — নতুন Repository শুরু করা

git init কমান্ড দিলে বর্তমান ফোল্ডারে একটি নতুন Git repository তৈরি হয়। এটি .git ফোল্ডার তৈরি করে এবং Git tracking শুরু করে।

নতুন প্রজেক্টে Git শুরু করা সবচেয়ে সাধারণ

# ধাপ ১: নতুন ফোল্ডার তৈরি করো mkdir my-website cd my-website # ধাপ ২: Git repository শুরু করো git init # আউটপুট: # Initialized empty Git repository in /path/to/my-website/.git/ # ধাপ ৩: কিছু ফাইল তৈরি করো echo "<!DOCTYPE html><html><body>হ্যালো!</body></html>" > index.html # ধাপ ৪: প্রথম commit করো git add . git commit -m "feat: প্রজেক্ট শুরু করা হয়েছে"

বিদ্যমান প্রজেক্টে Git যোগ করা পুরনো প্রজেক্ট

# পুরনো প্রজেক্ট ফোল্ডারে যাও cd existing-project # Git tracking শুরু করো git init # সব ফাইল প্রথম commit-এ যোগ করো git add . git commit -m "feat: পুরনো প্রজেক্টে Git যোগ করা হয়েছে"

🔷 git clone — GitHub থেকে Repository নামানো

git clone দিয়ে GitHub বা যেকোনো remote repository-র সম্পূর্ণ কপি — সব commit history, branch, tag সহ — তোমার কম্পিউটারে নামিয়ে আনা যায়।

HTTPS দিয়ে Clone শুরুতে এটি করো

# সাধারণ clone git clone https://github.com/username/repo-name.git # নির্দিষ্ট ফোল্ডার নামে clone git clone https://github.com/username/repo-name.git my-project # Clone শেষে ফোল্ডারে ঢোকো cd repo-name

SSH দিয়ে Clone SSH Key থাকলে

# SSH দিয়ে clone (password লাগে না, বেশি নিরাপদ) git clone git@github.com:username/repo-name.git # নির্দিষ্ট branch clone করো git clone --branch develop https://github.com/username/repo.git # Shallow clone — শুধু সর্বশেষ snapshot (দ্রুত) git clone --depth=1 https://github.com/username/repo.git
Clone করার পর কী পাবে:
  • সম্পূর্ণ প্রজেক্ট ফাইল
  • সম্পূর্ণ commit history
  • সব branch-এর তথ্য
  • origin নামে remote automatically সেট হয়ে যায়

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🗃️ Working Directory, Staging Area — Git-এর তিনটি অঞ্চল

Git সঠিকভাবে বোঝার সবচেয়ে গুরুত্বপূর্ণ ধারণা — ফাইল তিনটি অঞ্চলের মধ্যে যাতায়াত করে।


🔷 Git-এর তিনটি অঞ্চল

Git-এ যেকোনো ফাইল সবসময় তিনটির মধ্যে একটি অঞ্চলে থাকে। এই তিনটি অঞ্চল বোঝাটা Git শেখার সবচেয়ে গুরুত্বপূর্ণ ধাপ। এটি না বুঝলে পরের সব বিষয় কঠিন লাগবে।

অঞ্চল বাংলায় কী হয় এখানে? কমান্ড
Working Directory কাজের জায়গা তুমি এখানে ফাইল তৈরি, সম্পাদনা, মুছে ফেলো। Git ট্র্যাক করে কিন্তু save করে না। সাধারণ ফাইল কাজ
Staging Area প্রস্তুতির মঞ্চ পরবর্তী commit-এ কোন কোন পরিবর্তন নেবে তা বেছে নাও। এটিকে "Index" বলেও জানে। git add
Repository (.git) ইতিহাস ভান্ডার Commit হলে পরিবর্তন এখানে চিরতরে সংরক্ষিত হয়। এখান থেকে সরানো কঠিন। git commit

ফটোগ্রাফারের উপমায় বোঝো

উপমা — Photo Album বানানো:

Working Directory = ফটো তোলার সেশন (তুমি ছবি তুলছো)
Staging Area = কোন ছবিগুলো album-এ রাখবে বেছে নাও
Repository = Photo Album (বেছে নেওয়া ছবি চিরতরে সংরক্ষিত)

একটি ফটো সেশনে ১০০টি ছবি তুললেও সবগুলো album-এ রাখা হয় না — ভালো ছবিগুলো বেছে নেওয়া হয়। Staging Area-ও ঠিক তাই করে।

ফাইলের যাত্রা — step by step

# ধাপ ১: Working Directory-তে ফাইল তৈরি করো echo "হ্যালো" > index.html # ফাইলটি এখন "Untracked" অবস্থায় → Working Directory-তে # ধাপ ২: Staging Area-তে যোগ করো (বেছে নাও) git add index.html # ফাইলটি এখন "Staged" → Staging Area-তে # ধাপ ৩: Repository-তে সংরক্ষণ করো git commit -m "feat: প্রথম ফাইল তৈরি" # ফাইলটি এখন "Committed" → Repository-তে ✅ # বর্তমান অবস্থা সবসময় দেখতে পারো: git status

🔷 ফাইলের পাঁচটি অবস্থা — File States

Git-এ প্রতিটি ফাইল পাঁচটির মধ্যে একটি অবস্থায় থাকে। git status দিলে বর্তমান অবস্থা দেখা যায়।

অবস্থা অর্থ git status-এ দেখায় পরের পদক্ষেপ
Untracked নতুন ফাইল — Git এখনো জানে না এটার কথা Untracked files: index.html (লাল) git add index.html
Modified Git চেনে, কিন্তু নতুন পরিবর্তন stage হয়নি Changes not staged: style.css (লাল) git add style.css
Staged Staging Area-তে, commit-এর জন্য প্রস্তুত Changes to be committed: index.html (সবুজ) git commit -m "..."
Committed Repository-তে চিরতরে সংরক্ষিত, নিরাপদ nothing to commit কাজ শেষ ✅
Ignored .gitignore-এ আছে, Git সম্পূর্ণ উপেক্ষা করে দেখায় না কোনো পদক্ষেপ নেই

git status আউটপুট পড়তে শেখো

$ git status On branch main ← বর্তমান branch Your branch is up to date with 'origin/main'. Changes to be committed: ← ✅ Staged (সবুজ) (use "git restore --staged" to unstage) new file: contact.html modified: index.html Changes not staged for commit: ← ⚠️ Modified কিন্তু Staged নয় (লাল) (use "git add" to update) (use "git restore" to discard changes) modified: style.css Untracked files: ← 🆕 নতুন ফাইল (লাল) (use "git add" to include) images/logo.png
# সংক্ষিপ্ত status দেখো (চটজলদি) git status -s # বা git status --short # আউটপুট: # M index.html ← Modified staged # MM style.css ← Modified staged AND unstaged # M script.js ← Modified only unstaged # ?? logo.png ← Untracked # A contact.html ← New file staged

🔷 git add — Staging Area-তে যোগ করা

git add দিয়ে তুমি Git-কে বলো "এই পরিবর্তনগুলো পরবর্তী commit-এ রাখতে চাই।" এটি Staging Area-তে ফাইল যোগ করে।

কমান্ড কাজ কখন ব্যবহার করবে?
git add index.html একটি নির্দিষ্ট ফাইল stage করে শুধু একটি ফাইলের পরিবর্তন নিতে
git add style.css app.js একসাথে একাধিক ফাইল কয়েকটি নির্দিষ্ট ফাইল
git add . বর্তমান ফোল্ডারের সব পরিবর্তন সব পরিবর্তন একসাথে নিতে
git add -A সব পরিবর্তন (deleted সহ) .-এর মতো কিন্তু deleted ফাইলও নেয়
git add *.css সব .css ফাইল নির্দিষ্ট extension-এর সব ফাইল
git add css/ css/ ফোল্ডারের সব পরিবর্তন একটি ফোল্ডারের সব
git add -p Interactive — নির্দিষ্ট অংশ stage করো একই ফাইলের কিছু অংশ নিতে

বাস্তব উদাহরণ — আলাদা commit-এর জন্য আলাদা add

# তুমি ৩টি আলাদা কাজ করেছো: # ১. index.html-এ নতুন section যোগ # ২. style.css-এ navbar রঙ পরিবর্তন # ৩. script.js-এ form validation # এগুলো ৩টি আলাদা commit করা উচিত: # প্রথম commit: HTML পরিবর্তন git add index.html git commit -m "feat: হোম পেজে service section যোগ করা হয়েছে" # দ্বিতীয় commit: CSS পরিবর্তন git add style.css git commit -m "style: navbar-এর রঙ পরিবর্তন করা হয়েছে" # তৃতীয় commit: JS পরিবর্তন git add script.js git commit -m "feat: যোগাযোগ ফর্মে validation যোগ করা হয়েছে"
একটি commit = একটি কারণ। "নেভিগেশন ঠিক, footer যোগ, login page বানানো" — এটি ৩টি আলাদা commit হওয়া উচিত। ছোট ছোট commit করলে ভবিষ্যতে bug খোঁজা এবং নির্দিষ্ট পরিবর্তন revert করা সহজ হয়।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📸 Committing Changes — পরিবর্তন সংরক্ষণ

Commit হলো Git-এর মূল একক — প্রতিটি commit একটি সম্পূর্ণ snapshot।


🔷 Commit কী? — সহজ ব্যাখ্যা

Commit হলো তোমার প্রজেক্টের একটি নির্দিষ্ট মুহূর্তের সম্পূর্ণ snapshot — সেই মুহূর্তে সব ফাইল কেমন ছিল তার সম্পূর্ণ ছবি। প্রতিটি commit একটি unique ID (SHA hash) পায়।

প্রতিটি commit-এ থাকে:

অংশ উদাহরণ কাজ
SHA Hash a1b2c3d4e5f6... প্রতিটি commit-এর unique ID (40 character)
Author ফরীদুর রহমান <farid@example.com> কে commit করেছে
Date Mon Jun 2 10:30:00 2026 +0600 কখন commit করেছে
Message feat: নেভিগেশন বার যোগ করা হয়েছে কী পরিবর্তন করেছে
Parent Hash আগের commit-এর SHA ইতিহাসের শৃঙ্খল তৈরি করে
Snapshot সব ফাইলের বিষয়বস্তু সেই মুহূর্তের সম্পূর্ণ প্রজেক্ট
⚠️ Commit = Save বোতাম নয়!
Ctrl+S দিয়ে ফাইল save করা এবং git commit করা সম্পূর্ণ আলাদা জিনিস। Ctrl+S করলে ফাইল disk-এ save হয়, কিন্তু Git track করে না। Git-এ সংরক্ষণ করতে হলে git add + git commit করতে হবে।

🔷 git commit — বিভিন্ন পদ্ধতি

# সাধারণ commit (সবচেয়ে বেশি ব্যবহৃত) git commit -m "feat: নেভিগেশন বার যোগ করা হয়েছে" # Stage + commit একসাথে # (শুধু already tracked ফাইলের জন্য — নতুন ফাইলে কাজ করবে না) git commit -am "style: হেডারের রঙ পরিবর্তন করা হয়েছে" # বিস্তারিত message-এর জন্য editor খুলবে git commit # (VS Code বা Vim খুলবে — লিখে save করলে commit হবে) # শেষ commit-এ ছোট পরিবর্তন যোগ করো (message একই রাখো) git add missed-file.html git commit --amend --no-edit # শেষ commit-এর message পরিবর্তন করো git commit --amend -m "feat: নতুন সঠিক message"
⚠️ --amend সাবধানে ব্যবহার করো! git commit --amend শেষ commit পরিবর্তন করে নতুন commit তৈরি করে। যদি সেই commit ইতিমধ্যে GitHub-এ push করা হয়ে থাকে, তাহলে amend করা এড়াও — অন্যদের সমস্যা হতে পারে।

🔷 Commit Message লেখার নিয়ম — Best Practice

Commit message হলো ভবিষ্যতের তোমাকে এবং তোমার সহকর্মীদের জন্য চিঠি। ভালো message লেখা একটি professional অভ্যাস যা বড় প্রজেক্টে অপরিহার্য।

Conventional Commits — শিল্পের মানদণ্ড

Conventional Commits হলো commit message-এর একটি জনপ্রিয় মান। Format: type(scope): description

type কখন ব্যবহার? উদাহরণ
feat: নতুন ফিচার যোগ feat: লগইন পেজ তৈরি করা হয়েছে
fix: Bug ঠিক করা fix: মোবাইলে মেনু বন্ধ না হওয়ার bug ঠিক
style: শুধু CSS/formatting পরিবর্তন style: বাটনের রঙ ও padding পরিবর্তন
docs: Documentation পরিবর্তন docs: README-তে ইনস্টলেশন গাইড
refactor: কোড পুনর্গঠন (ফিচার একই) refactor: getUserData ফাংশন পুনর্লিখন
chore: Build, dependencies, config chore: package dependencies আপডেট
test: Test যোগ বা পরিবর্তন test: login form-এর unit test যোগ
perf: Performance উন্নতি perf: ছবি lazy loading যোগ করা হয়েছে
revert: পুরনো commit undo করা revert: feat: login page তৈরি
❌ খারাপ commit message (এগুলো করো না): git commit -m "fix" git commit -m "update" git commit -m "changes" git commit -m "asdf" git commit -m "করা হয়েছে" git commit -m "WIP" ✅ ভালো commit message (এগুলো করো): git commit -m "fix: মোবাইলে header logo কাটা যাওয়ার bug ঠিক করা হয়েছে" git commit -m "feat: সার্চ বার যোগ করা হয়েছে — real-time filter সহ" git commit -m "style: footer-এর background color #1D2B3A করা হয়েছে" git commit -m "docs: contact পেজে ঠিকানা আপডেট করা হয়েছে" git commit -m "chore: node_modules আপডেট করা হয়েছে"

Multi-line Commit Message

বড় পরিবর্তনের জন্য বিস্তারিত message লেখা ভালো অভ্যাস:

# -m ছাড়া commit করলে editor খুলবে: git commit # অথবা দুটি -m flag দিয়ে: git commit -m "feat: user authentication system যোগ" \ -m "JWT token-based login/logout, password hashing সহ। Closes #42" # বিন্যাস: # ১ম লাইন: সংক্ষিপ্ত সারসংক্ষেপ (৭২ character-এর মধ্যে) # খালি লাইন # পরের লাইন: বিস্তারিত ব্যাখ্যা, কেন এই পরিবর্তন, issue reference

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🙈 .gitignore — ফাইল উপেক্ষা করা

কিছু ফাইল Git-এ রাখা উচিত নয় — password, auto-generated ফাইল, editor ফাইল। .gitignore দিয়ে সেগুলো বাদ দাও।


🔷 .gitignore কী এবং কেন লাগে?

.gitignore হলো একটি সাধারণ text ফাইল যেখানে তুমি বলে দাও কোন ফাইল বা ফোল্ডার Git track করবে না।

ধরন উদাহরণ কেন ignore করবে?
গোপন তথ্য .env, config.secret.js Password, API key — GitHub-এ গেলে বিপদ!
Auto-generated node_modules/, dist/, build/ পুনরায় তৈরি করা যায়, commit করার দরকার নেই
OS ফাইল .DS_Store (Mac), Thumbs.db (Win) ব্যক্তিগত system ফাইল, অন্যদের দরকার নেই
Editor ফাইল .vscode/, .idea/ ব্যক্তিগত editor settings
Log ফাইল *.log, npm-debug.log Runtime-এ তৈরি হয়, repository-তে দরকার নেই

🔷 .gitignore Pattern-এর নিয়ম

# .gitignore ফাইল তৈরি করো (প্রজেক্ট root-এ) # Windows: type nul > .gitignore # macOS/Linux: touch .gitignore # ===== .gitignore-এর বিষয়বস্তু ===== # ১. নির্দিষ্ট ফাইল ignore করো .env config.secret.js secret.txt # ২. নির্দিষ্ট ফোল্ডার ignore করো (/ শেষে দিলে ফোল্ডার বোঝায়) node_modules/ dist/ build/ .cache/ # ৩. নির্দিষ্ট extension-এর সব ফাইল ignore করো *.log ← সব .log ফাইল *.tmp ← সব .tmp ফাইল *.DS_Store ← Mac system ফাইল # ৪. Pattern দিয়ে ignore করো debug-*.log ← debug- দিয়ে শুরু সব .log ফাইল **/*.temp ← যেকোনো ফোল্ডারের .temp ফাইল # ৫. Ignore বাতিল করো (! দিয়ে force-track করো) !important.log ← এই ফাইলটি ignore হবে না # ৬. শুধু root-এ ignore করো (/ দিয়ে শুরু) /config.local.js ← শুধু root-এর এই ফাইল, subfolder-এর না # Comment লেখো # দিয়ে: # এটি একটি comment — Git এটি পড়বে না

Web Project-এর জন্য সম্পূর্ণ .gitignore Copy করো

# Dependencies node_modules/ .pnp/ .pnp.js yarn.lock # Build output dist/ build/ .next/ out/ .nuxt/ # Environment variables (⚠️ সবচেয়ে গুরুত্বপূর্ণ!) .env .env.local .env.development.local .env.test.local .env.production.local # Editor ফাইল .vscode/settings.json .idea/ *.swp *.swo *.suo # OS ফাইল .DS_Store .DS_Store? Thumbs.db desktop.ini ehthumbs.db # Log ফাইল *.log npm-debug.log* yarn-debug.log* yarn-error.log* # Test coverage coverage/ .nyc_output/ # Misc *.pid *.seed *.pid.lock

Already Tracked ফাইল Ignore করতে

যদি কোনো ফাইল আগে commit করা হয়ে গেছে, তারপর .gitignore-এ যোগ করলেও Git সেটা track করতে থাকবে। সমাধান:

# cache থেকে ফাইলটি সরাও (ফাইল মুছবে না, শুধু Git tracking বন্ধ হবে) git rm --cached .env # ফোল্ডার হলে: git rm --cached -r node_modules/ # তারপর .gitignore-এ যোগ করো এবং commit করো git add .gitignore git commit -m "chore: .env এবং node_modules ignore করা হয়েছে"
gitignore.io ওয়েবসাইটে গিয়ে তোমার project type লিখলে (Node, React, Python ইত্যাদি) স্বয়ংক্রিয়ভাবে .gitignore তৈরি হবে। URL: toptal.com/developers/gitignore

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🔍 git diff — পরিবর্তন বিস্তারিত দেখো

Commit করার আগে ঠিক কী পরিবর্তন হয়েছে তা দেখা একটি ভালো অভ্যাস।


🔷 চার ধরনের diff

কমান্ড কী দেখাবে কখন ব্যবহার
git diff Unstaged পরিবর্তন (Working Dir বনাম Staging) Stage করার আগে
git diff --staged Staged পরিবর্তন (Staging বনাম Last Commit) Commit করার আগে review
git diff HEAD সব পরিবর্তন (Working Dir বনাম Last Commit) মোট কী পরিবর্তন হয়েছে
git diff main feature দুটো branch-এর পার্থক্য Merge করার আগে
$ git diff style.css diff --git a/style.css b/style.css index a1b2c3d..d4e5f6g 100644 --- a/style.css ← আগে ছিল +++ b/style.css ← এখন আছে @@ -10,7 +10,9 @@ .navbar { background: #1D2B3A; - padding: 10px; ← লাল = মুছে গেছে + padding: 15px 20px; ← সবুজ = নতুন যোগ হয়েছে + box-shadow: 0 2px 8px rgba(0,0,0,0.2); ← নতুন color: #ffffff; } # সারসংক্ষেপ দেখো (পরিবর্তন কতটা বড়) git diff --stat # দুটো commit-এর পার্থক্য git diff a1b2c3d b2c3d4e

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📜 Commit History — git log বিস্তারিত

Commit history পড়তে পারা মানে প্রজেক্টের পুরো গল্প বুঝতে পারা।


🔷 git log — সব commit দেখো

# বিস্তারিত log (সব তথ্য) git log # সংক্ষিপ্ত — এক লাইনে প্রতিটি commit git log --oneline # Tree আকারে সব branch (সবচেয়ে বেশি ব্যবহৃত) git log --oneline --graph --decorate --all # শেষ n টি commit git log -5 git log -10 # নির্দিষ্ট ফাইলের history git log -- style.css git log --oneline -- index.html # নির্দিষ্ট ব্যক্তির commit git log --author="Farid" # নির্দিষ্ট সময়ের মধ্যে git log --since="2026-01-01" --until="2026-06-01" git log --since="3 days ago" git log --since="1 week ago" # Commit message-এ keyword খোঁজো git log --grep="navbar" git log --grep="fix" # কোড-এ নির্দিষ্ট text কোথায় যোগ/বাদ হয়েছে git log -S "getUserData" ← "pickaxe" search
$ git log --oneline --graph --all * a1b2c3d (HEAD -> main, origin/main) Merge: feature/contact তৈরি |\ | * b2c3d4e (feature/contact) feat: contact form validation যোগ | * c3d4e5f feat: contact page HTML তৈরি * | d4e5f6g fix: mobile navbar bug ঠিক * | e5f6g7h style: footer redesign |/ * f6g7h8i feat: about page তৈরি * g7h8i9j chore: প্রজেক্ট শুরু # মানে: # HEAD → তুমি এখন main-এ আছো # * = commit # |\ = branch diverge হয়েছে # |/ = branch merge হয়েছে

git show — নির্দিষ্ট Commit-এর বিবরণ

# শেষ commit দেখো git show git show HEAD # নির্দিষ্ট commit দেখো git show a1b2c3d # শেষ থেকে তৃতীয় commit (HEAD~2 মানে ২ পিছনে) git show HEAD~2 # একটি commit-এ কোন ফাইল পরিবর্তন হয়েছে তালিকা git show --name-only a1b2c3d # নির্দিষ্ট commit-এ একটি ফাইলের অবস্থা দেখো git show a1b2c3d:style.css

git blame — কে কোন লাইন লিখেছে

# কে কোন লাইন লিখেছে দেখো git blame style.css # আউটপুট: # a1b2c3d (Farid 2026-05-01 10:30) .navbar { # b2c3d4e (Rahman 2026-05-05 14:20) background: #1D2B3A; # a1b2c3d (Farid 2026-05-01 10:30) padding: 15px; # নির্দিষ্ট লাইন range দেখো git blame -L 10,20 style.css

git reflog — জীবন রক্ষাকারী কমান্ড ⭐ গুরুত্বপূর্ণ

# HEAD-এর সব পরিবর্তন দেখো (গত ৯০ দিন পর্যন্ত) git reflog # আউটপুট: # a1b2c3d HEAD@{0}: commit: feat: navbar search # b2c3d4e HEAD@{1}: checkout: moving from feature to main # c3d4e5f HEAD@{2}: commit: fix: mobile bug # d4e5f6g HEAD@{3}: reset: moving to HEAD~1 # ভুলে branch মুছে ফেললে বা reset করলে reflog দিয়ে ফিরে পাওয়া যায়! git checkout -b recovered-branch HEAD@{3}
git reflog কখন কাজে লাগে:
git reset --hard করে ভুলে commit মুছে ফেললে
→ ভুলে branch delete করে ফেললে
→ যেকোনো "ভুলে সব নষ্ট হয়ে গেছে" পরিস্থিতিতে — reflog প্রায়ই সব ফিরিয়ে দিতে পারে

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

↩️ পরিবর্তন Undo করা — git restore, revert, reset

Git-এর সবচেয়ে শক্তিশালী দিক হলো যেকোনো পরিবর্তন undo করার ক্ষমতা। কিন্তু ভুল কমান্ড দিলে সমস্যা হতে পারে।


🔷 পরিস্থিতি অনুযায়ী সঠিক কমান্ড

পরিস্থিতি সঠিক কমান্ড নিরাপদ? পরিবর্তন হারায়?
Stage করা file unstage করো git restore --staged file.html না — পরিবর্তন Working Dir-এ থাকে
Working Dir-এর পরিবর্তন বাতিল git restore file.html ⚠️ হ্যাঁ — forever মুছে যায়
সব unstaged পরিবর্তন বাতিল git restore . ⚠️ হ্যাঁ — সব মুছে
Commit নিরাপদে বাতিল (new commit) git revert a1b2c3d ✅ সবচেয়ে নিরাপদ না — history রেকর্ড থাকে
শেষ commit বাতিল, staged রাখো git reset --soft HEAD~1 না — Staging Area-তে থাকে
শেষ commit বাতিল, unstaged রাখো git reset HEAD~1 ⚠️ না — Working Dir-এ থাকে
শেষ commit + সব পরিবর্তন মুছো git reset --hard HEAD~1 ❌ বিপজ্জনক হ্যাঁ — চিরতরে

🔷 git restore — Working Directory ও Staging Area ঠিক করা

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # পরিস্থিতি ১: index.html edit করেছো, পুরনো version চাই # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ git restore index.html # ⚠️ Working Dir-এর পরিবর্তন চিরতরে মুছে যাবে! # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # পরিস্থিতি ২: git add করেছো, কিন্তু এই commit-এ নেবে না # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ git restore --staged style.css # ✅ Unstaged হলো, পরিবর্তন Working Dir-এ থাকলো # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # পরিস্থিতি ৩: নির্দিষ্ট commit থেকে file ফিরিয়ে আনো # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ git restore --source=a1b2c3d style.css # a1b2c3d commit-এর style.css ফিরে আসবে Working Dir-এ

🔷 git revert — নিরাপদভাবে Commit বাতিল

git revert হলো সবচেয়ে নিরাপদ "undo" পদ্ধতি। এটি পুরনো commit মুছে না, বরং সেটার বিপরীত একটি নতুন commit তৈরি করে। Public/shared branch-এ সবসময় git revert ব্যবহার করো।

# শেষ commit বাতিল করো (নতুন "Revert" commit তৈরি হবে) git revert HEAD # নির্দিষ্ট commit বাতিল করো git revert a1b2c3d # একাধিক commit বাতিল করো git revert HEAD~3..HEAD # Interactive নয়, সরাসরি commit করো git revert --no-edit a1b2c3d # History-তে কী হয়: # আগে: A → B → C (C-তে bug আছে) # revert: A → B → C → D (D = C-এর বিপরীত, bug চলে গেছে) # C-এর history রেকর্ড থাকে!

🔷 git reset — History পরিবর্তন (সাবধানে)

git reset commit history পরিবর্তন করে। তিনটি mode আছে:

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # --soft: commit বাতিল, পরিবর্তন Staged থাকে # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ git reset --soft HEAD~1 # ব্যবহার: commit message ভুল ছিল, আবার commit করতে চাই # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # --mixed (default): commit বাতিল, পরিবর্তন Unstaged থাকে # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ git reset HEAD~1 # ব্যবহার: commit ভুল ছিল, পরিবর্তন আবার review করতে চাই # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # --hard: commit + সব পরিবর্তন মুছে দাও # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ git reset --hard HEAD~1 # ব্যবহার: পুরো experiment নষ্ট, সব বাতিল চাই # শেষ ৩টি commit বাতিল git reset --soft HEAD~3 ← পরিবর্তন রেখে git reset --hard HEAD~3 ← সব মুছে # নির্দিষ্ট commit-এ ফিরে যাও git reset --hard a1b2c3d
⚠️ গুরুত্বপূর্ণ সতর্কতা:
Push করার পরে git reset করো না! GitHub-এ push করা commit reset করলে অন্যদের কাজ নষ্ট হতে পারে এবং force push দরকার পড়বে। Push হয়ে গেলে সবসময় git revert ব্যবহার করো।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🙈 .gitignore — অপ্রয়োজনীয় ফাইল বাদ দাও

কিছু ফাইল কখনো Git-এ রাখা উচিত নয় — password, auto-generated files, editor settings। .gitignore এই কাজ করে।


🔷 .gitignore কেন দরকার?

ফাইলের ধরন উদাহরণ কেন ignore করবে
গোপন তথ্য .env, .env.local Password, API key — অন্যরা দেখলে বিপদ
Dependencies node_modules/, vendor/ ৫০,০০০+ ফাইল, npm install দিলেই হয়
Build output dist/, build/, .next/ Source থেকে পুনরায় তৈরি করা যায়
OS ফাইল .DS_Store, Thumbs.db অন্য OS-এর লোকের দরকার নেই
Editor/IDE ফাইল .vscode/, .idea/ ব্যক্তিগত settings, team-এর নয়
Log ফাইল *.log, npm-debug.log Runtime-এ তৈরি হয়, প্রতিবার আলাদা
Cache .cache/, *.pyc Temporary ফাইল

🔷 .gitignore-এর Pattern নিয়ম

# এটি একটি comment — # দিয়ে শুরু হলে ignore করে # নির্দিষ্ট ফাইল .env secret.json config/database.yml # নির্দিষ্ট extension-এর সব ফাইল *.log ← সব .log ফাইল *.tmp ← সব .tmp ফাইল *.swp ← Vim swap ফাইল # পুরো ফোল্ডার (trailing / দিলে ফোল্ডার বোঝায়) node_modules/ dist/ .cache/ coverage/ # Wildcard ব্যবহার docs/*.txt ← docs/ ফোল্ডারের সব .txt src/**/*.test.js ← যেকোনো depth-এ .test.js ফাইল # ! দিয়ে Exception (ignore করো না) *.log ← সব log ignore !important.log ← কিন্তু এটা রাখো

Web Project-এর জন্য সম্পূর্ণ .gitignore

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # .gitignore — Web Project Template # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Environment (সবচেয়ে গুরুত্বপূর্ণ! কখনো commit করো না) .env .env.local .env.development .env.production .env.test # Dependencies node_modules/ .pnp/ .pnp.js # Build output dist/ build/ out/ .next/ .nuxt/ .vuepress/dist/ # Cache ও Temporary .cache/ *.cache .parcel-cache/ .eslintcache # Log ফাইল logs/ *.log npm-debug.log* yarn-debug.log* yarn-error.log* # OS তৈরি ফাইল # macOS .DS_Store .AppleDouble .LSOverride # Windows Thumbs.db ehthumbs.db Desktop.ini # Linux *~ # Editor ফাইল .vscode/settings.json .idea/ *.sublime-project *.sublime-workspace # Coverage reports (Testing) coverage/ .nyc_output/

Already Tracked ফাইল Ignore করা

# সমস্যা: আগে commit করেছিলে, এখন ignore করতে চাও # সমাধান ধাপ ১: Git tracking বন্ধ করো (ফাইল disk-এ থাকবে) git rm --cached .env # অথবা পুরো ফোল্ডার git rm --cached -r node_modules/ # সমাধান ধাপ ২: .gitignore-এ যোগ করো echo ".env" >> .gitignore # সমাধান ধাপ ৩: commit করো git add .gitignore git commit -m "chore: .env গোপন তথ্য tracking বন্ধ করা হয়েছে" # ✅ এরপর থেকে .env আর track হবে না
gitignore.io বা github.com/github/gitignore — এখানে বিভিন্ন প্রজেক্টের জন্য তৈরি .gitignore template আছে। প্রজেক্ট type লিখলেই complete .gitignore পাবে।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🌿 Branching Basics — Branch তৈরি, Switch, Rename, Delete

Branch হলো Git-এর সবচেয়ে শক্তিশালী feature। এটা সঠিকভাবে শিখলে টিমওয়ার্ক অনেক সহজ হয়ে যায়।


🔷 Branch-এর মূল কমান্ড

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Branch দেখা # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # সব local branch git branch # * main ← * মানে এখন এই branch-এ আছো # feature/login # fix/navbar # সব branch (remote সহ) git branch -a # * main # feature/login # remotes/origin/main # remotes/origin/feature/login # Branch-এর শেষ commit দেখো git branch -v # * main a1b2c3d feat: navbar search # feature b2c3d4e feat: login page WIP
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Branch তৈরি করা # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # শুধু তৈরি (switch হবে না) git branch feature/login-page # তৈরি + switch একসাথে (সবচেয়ে বেশি ব্যবহৃত) git checkout -b feature/login-page # আধুনিক পদ্ধতি (Git 2.23+) git switch -c feature/login-page # নির্দিষ্ট commit থেকে branch তৈরি git checkout -b hotfix/payment a1b2c3d # Remote branch track করে local branch তৈরি git checkout -b feature/login origin/feature/login
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Branch Switch করা # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # পুরনো পদ্ধতি git checkout main git checkout feature/login # আধুনিক পদ্ধতি (পরিষ্কার, confusing নয়) git switch main git switch feature/login # আগের branch-এ ফিরে যাও (- মানে "আগেরটা") git switch - git checkout -
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Branch Rename করা # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # বর্তমান branch rename git branch -m new-name # নির্দিষ্ট branch rename git branch -m old-name new-name # Remote-এও rename করতে: git push origin --delete old-name ← পুরনো নাম মুছো git push origin -u new-name ← নতুন নামে push করো
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Branch Delete করা # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Merge হওয়া branch মুছো (নিরাপদ — merge না হলে error দেবে) git branch -d feature/login # Merge না হলেও মুছো (জোর করে) git branch -D feature/experiment # Remote branch মুছো git push origin --delete feature/login # Merge হওয়া সব branch একসাথে মুছো (main ও develop ছাড়া) git branch --merged | grep -v "\*\|main\|develop" | xargs git branch -d
Branch নামকরণের সর্বোত্তম পদ্ধতি:
feature/search-bar — নতুন feature
fix/login-redirect-bug — bug fix
hotfix/payment-500-error — জরুরি production fix
release/v2.1.0 — release preparation
chore/update-dependencies — maintenance কাজ
→ সবসময় lowercase ও hyphen (-) ব্যবহার করো, space নয়

🔷 Branch-এর সম্পূর্ণ Lifecycle

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Feature Branch Workflow — ধাপে ধাপে # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # ধাপ ১: main-এ সর্বশেষ কোড আনো git checkout main git pull origin main # ধাপ ২: নতুন feature branch তৈরি করো git checkout -b feature/user-profile # ধাপ ৩: কাজ করো ও commit করো # ... profile.html তৈরি করলে ... git add profile.html git commit -m "feat: user profile page HTML structure" # ... CSS যোগ করলে ... git add style.css git commit -m "style: profile page সাজানো হয়েছে" # ধাপ ৪: GitHub-এ push করো (PR দেওয়ার জন্য) git push -u origin feature/user-profile # ধাপ ৫: GitHub-এ Pull Request দাও # → "Compare & pull request" ক্লিক করো # ধাপ ৬: Review ও merge-এর পর branch মুছো git checkout main git pull origin main ← merged কোড নামাও git branch -d feature/user-profile ← local মুছো

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🔀 Merging Basics — Branch একত্রিত করা

Feature তৈরি শেষ হলে main-এ যোগ করার সময়। Merge বোঝা মানে Git-এর সবচেয়ে গুরুত্বপূর্ণ অংশ বোঝা।


🔷 Merge করার পদ্ধতি

# সাধারণ merge (সবচেয়ে সহজ) git checkout main git merge feature/login-page # Fast-forward merge হবে (কোনো diverge ছিল না) # Merge commit সহ (history পরিষ্কার রাখে, দলগত কাজে ভালো) git merge --no-ff feature/login-page -m "feat: login page main-এ যোগ করা হয়েছে" # Squash merge (feature-এর সব ছোট commit একটিতে মিলিয়ে) git merge --squash feature/login-page git commit -m "feat: login page — email/password validation সহ"

Fast-Forward vs No-Fast-Forward

Fast-Forward Merge (কোনো diverge নেই): আগে: main: A → B → C feature: A → B → C → D → E merge: main: A → B → C → D → E (শুধু pointer সরে গেল, কোনো merge commit নেই) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ No-Fast-Forward Merge (--no-ff): আগে: main: A → B → C → F feature: A → B → D → E merge: main: A → B → C → F → G (merge commit) ↗ E → D ↗ (feature branch-এর existence রেকর্ড থাকে)
Merge পদ্ধতি History কখন ব্যবহার
Fast-Forward Linear — simple ও clean ছোট, একা কাজ, personal project
No-Fast-Forward (--no-ff) Merge commit — feature-এর context রাখে দলগত কাজ, feature branch workflow
Squash সব commit একটিতে — cleanest PR merge, ছোট fix commit-এর দল

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚔️ Merge Conflict — কারণ, সমাধান ও প্রতিরোধ

Conflict দেখে ভয় পেও না। এটি সমাধানযোগ্য এবং সমাধান জানা একজন দক্ষ Developer-এর চিহ্ন।


🔷 Conflict কেন হয়?

যখন দুটো branch-এ একই ফাইলের একই স্থানে ভিন্ন পরিবর্তন হয়, Git নিজে সিদ্ধান্ত নিতে পারে না কোনটা রাখবে। তখন সে "Conflict" চিহ্নিত করে এবং তোমাকে সিদ্ধান্ত নিতে বলে।

পরিস্থিতি: তুমি main-এ: <h1>আমার ওয়েবসাইট</h1> পরিবর্তন করেছো সহকর্মী feature-এ: <h1>আমাদের ওয়েবসাইট</h1> পরিবর্তন করেছে এখন merge করলে Conflict!
Conflict হলে index.html-এ এই চিহ্ন দেখাবে: <<<<<<< HEAD <h1>আমার ওয়েবসাইট</h1> ← তোমার কোড (বর্তমান branch) ======= <h1>আমাদের ওয়েবসাইট</h1> ← আসছে কোড (merge করছো যেটা) >>>>>>> feature/update-title মানে: <<<<<<< HEAD → এটা বর্তমান branch (HEAD) এর কোড ======= → বিভাজক রেখা >>>>>>> → এটা incoming branch-এর কোড

🔷 Conflict সমাধানের ধাপ

# ধাপ ১: Conflict আছে কোন ফাইলে জানো $ git status # both modified: index.html # both modified: style.css # ধাপ ২: ফাইলটি খুলো এবং conflict markers খোঁজো # VS Code-এ রঙিন করে দেখাবে এবং বোতাম দেবে # ধাপ ৩: সিদ্ধান্ত নাও — কোনটা রাখবে বা দুটো মিলিয়ে নাও # Conflict-এর আগে: <<<<<<< HEAD <h1>আমার ওয়েবসাইট</h1> ======= <h1>আমাদের ওয়েবসাইট</h1> >>>>>>> feature/update-title # Conflict সমাধানের পরে (markers মুছে ঠিক কোড রাখো): <h1>আমাদের ওয়েবসাইট</h1> # ধাপ ৪: সমাধান করা ফাইল stage করো git add index.html git add style.css # ধাপ ৫: Merge সম্পন্ন করো git commit -m "fix: title conflict সমাধান — আমাদের রাখা হয়েছে"
# Merge বাতিল করতে চাইলে git merge --abort # সব পরিবর্তন বাতিল, merge-এর আগের অবস্থায় ফিরে যাবে # VS Code-এ Conflict সমাধান করা অনেক সহজ: # "Accept Current Change" → HEAD (তোমার) রাখো # "Accept Incoming Change" → আসছে পরিবর্তন রাখো # "Accept Both Changes" → দুটোই রাখো

🔷 Conflict প্রতিরোধের উপায়

পদ্ধতি বিবরণ
প্রতিদিন pull করো কাজ শুরুর আগে git pull করলে conflict কমে
ছোট PR বড় feature ভেঙে ছোট PR করলে conflict কম হয়
কথা বলো কে কোন ফাইলে কাজ করছে জানিয়ে রাখো
Branch আপ-টু-ডেট রাখো নিয়মিত main থেকে merge বা rebase করো

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🐙 GitHub Essentials — Account, Interface ও SSH Setup

GitHub হলো বিশ্বের সবচেয়ে বড় code hosting platform। ৩ কোটি+ ডেভেলপার এখানে কাজ করে।


🔷 GitHub Account ও Profile Setup

Account তৈরির পর অবশ্যই করবে

কাজ কোথায় গুরুত্ব
Profile picture দাও Settings → Profile ⭐⭐⭐
Bio লেখো (সংক্ষেপে) Settings → Profile ⭐⭐⭐
SSH Key যোগ করো Settings → SSH Keys ⭐⭐⭐ (অবশ্যই)
Profile README তৈরি করো username/username repo ⭐⭐⭐ (Portfolio-র জন্য)
2FA চালু করো Settings → Password and auth ⭐⭐⭐ (নিরাপত্তা)

SSH Key Setup — একবারই করতে হয়

# ধাপ ১: SSH key pair তৈরি করো ssh-keygen -t ed25519 -C "farid@example.com" # Enter, Enter, Enter — default location ও no passphrase # Key কোথায় গেল? # Private key: ~/.ssh/id_ed25519 (কখনো কাউকে দেবে না!) # Public key: ~/.ssh/id_ed25519.pub (এটাই GitHub-এ দেবে) # ধাপ ২: Public key কপি করো cat ~/.ssh/id_ed25519.pub # ssh-ed25519 AAAAC3Nza... farid@example.com # পুরো লাইনটা কপি করো # ধাপ ৩: GitHub-এ যাও # Settings → SSH and GPG keys → New SSH key # Title: "আমার Laptop" বা যা বুঝো # Key: paste করো # Add SSH key ক্লিক করো # ধাপ ৪: Connection পরীক্ষা করো ssh -T git@github.com # সফল: "Hi farid! You've successfully authenticated..." # ❌ হলে: ssh-add ~/.ssh/id_ed25519 চালাও

Private vs Public Repository

বিষয় Public Private
দেখা যায় সবাই শুধু তুমি + invited
Open Source
Portfolio ✅ ভালো
Client কাজ ❌ বিপজ্জনক
Personal কোড তোমার পছন্দ ✅ নিরাপদ

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🌐 Git Remotes — Push, Pull এবং Fetch

Remote হলো তোমার local repository-র "ক্লাউড মিরর"। Push করলে সেখানে যায়, Pull করলে সেখান থেকে আসে।


🔷 Remote Managing — যোগ, দেখা, মুছা

# সব remote দেখো git remote -v # origin git@github.com:farid/my-website.git (fetch) # origin git@github.com:farid/my-website.git (push) # নতুন remote যোগ করো git remote add origin git@github.com:username/repo.git # Remote URL পরিবর্তন করো (HTTPS থেকে SSH-এ) git remote set-url origin git@github.com:username/repo.git # Remote মুছো git remote remove upstream # Remote rename করো git remote rename origin github # Remote-এর বিস্তারিত তথ্য git remote show origin

একাধিক Remote — Fork করা project-এ

# Fork করা project-এ সাধারণত দুটো remote থাকে: # origin = তোমার fork (তুমি push করো এখানে) # upstream = original repo (এখান থেকে latest পাও) git remote add upstream git@github.com:original-owner/repo.git git remote -v # origin git@github.com:farid/forked-repo.git # upstream git@github.com:original-owner/repo.git

🔷 git push — Remote-এ পাঠানো

# প্রথমবার push করো এবং tracking সেট করো git push -u origin main # এরপর থেকে শুধু: git push # নির্দিষ্ট branch push করো git push origin feature/login # সব tag push করো git push --tags # নির্দিষ্ট tag push করো git push origin v1.0.0 # Remote branch মুছো git push origin --delete feature/old-feature # Force push — ⚠️ সাবধানে git push --force-with-lease ← নিরাপদ force push git push --force ← বিপজ্জনক — avoid করো
⚠️ git push --force কখনো করো না shared branch-এ!
force push করলে অন্যদের commit history ধ্বংস হতে পারে। যদি করতেই হয়, --force-with-lease ব্যবহার করো — এটি অন্য কেউ push করলে সেটা আগে দেখে।

🔷 git pull ও git fetch — Remote থেকে আনা

কমান্ড কী করে কখন ব্যবহার
git fetch Remote-এর পরিবর্তন download করে, কিন্তু merge করে না দেখতে চাও কী এলো, সাথে সাথে merge নয়
git pull git fetch + git merge সহকর্মীর কাজ নামাও ও মিলিয়ে নাও
git pull --rebase git fetch + git rebase Clean linear history চাইলে
# সহকর্মীর কাজ নামাও git pull # নির্দিষ্ট branch pull করো git pull origin main git pull origin feature/login # নিরাপদ পদ্ধতি — দেখে তারপর merge করো git fetch origin ← আগে download করো git log origin/main --oneline -5 ← কী এলো দেখো git diff HEAD origin/main ← পার্থক্য দেখো git merge origin/main ← ভালো লাগলে merge করো # Deleted remote branch সরাও git fetch --prune git remote prune origin

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🔄 প্রতিদিনের Workflow — VS Code থেকে GitHub পর্যন্ত

এটাই সবচেয়ে গুরুত্বপূর্ণ সেকশন। প্রতিদিন ঠিক এভাবেই কাজ হয়।


🔷 মূল ৫টি কমান্ড — প্রতিদিন ব্যবহৃত

git status ← এখন কোন অবস্থায় আছি? git add . ← এই পরিবর্তনগুলো নেবো git commit ← সংরক্ষণ করো git push ← GitHub-এ পাঠাও git pull ← সহকর্মীর কাজ নামাও

সম্পূর্ণ দৈনিক Workflow

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # সকালে কাজ শুরুর আগে # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ git checkout main git pull ← সহকর্মীর রাতের কাজ নামাও # নতুন feature-এর জন্য branch তৈরি করো git checkout -b feature/add-search-bar # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # কাজ করো — VS Code-এ edit করো # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # ... index.html-এ search bar যোগ করলে ... # ... style.css-এ search bar style করলে ... # কী পরিবর্তন হয়েছে দেখো git status git diff ← বিস্তারিত দেখো # পরিবর্তন stage করো git add . # অথবা নির্দিষ্ট ফাইল git add index.html style.css # Commit করো git commit -m "feat: header-এ real-time search bar যোগ" # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # আরো কাজ করো, আরো commit করো # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # ... script.js-এ search logic লিখলে ... git add script.js git commit -m "feat: search filter logic implement করা হয়েছে" # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # কাজ শেষে GitHub-এ push করো # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ git push -u origin feature/add-search-bar # GitHub-এ যাও → Pull Request দাও

🔷 VS Code-এ ফাইল পরিবর্তন করার পর GitHub Update করা

ধরো তুমি VS Code-এ index.html পরিবর্তন করেছো এবং GitHub-এ দেখাতে চাও। এই ৪টি ধাপ মনে রাখলেই হলো:

# VS Code-এ Terminal খোলো: Ctrl + ` (backtick) # ━━━━━━ ধাপ ১ ━━━━━━ $ git status # On branch main # Changes not staged for commit: # modified: index.html # ✅ দেখা গেল কী পরিবর্তন হয়েছে # ━━━━━━ ধাপ ২ ━━━━━━ $ git add . # (কোনো output আসবে না — এটা ঠিক আছে) # ━━━━━━ ধাপ ৩ ━━━━━━ $ git commit -m "feat: hero section-এ নতুন CTA বাটন যোগ" # [main a1b2c3d] feat: hero section-এ নতুন CTA বাটন যোগ # 1 file changed, 5 insertions(+), 2 deletions(-) # ━━━━━━ ধাপ ৪ ━━━━━━ $ git push # Enumerating objects: 5, done. # To git@github.com:farid/my-website.git # b2c3d4e..a1b2c3d main → main # ✅ GitHub-এ গিয়ে দেখো — নতুন commit আছে!

🔷 Push Reject হলে কী করবে?

এটি খুব সাধারণ ঘটনা। সহকর্মী আগেই push করেছে এবং তুমি সেই কোড নামাওনি।

$ git push error: failed to push some refs to 'git@github.com:farid/website.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. Integrate the remote changes before pushing again. # সমাধান: $ git pull ← আগে GitHub-এর কোড নামাও # (Conflict থাকলে সমাধান করো) $ git push ← এবার push করো ✅
VS Code-এর Source Control Panel:
VS Code-এর বামে গিয়ার আইকনের নিচে "Source Control" (Ctrl+Shift+G) আছে। এখান থেকে git add, commit, push — সব graphically করা যায়। Command line ও GUI দুটোই ব্যবহার করতে শেখো।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🤝 Forking vs Cloning — Open Source Contribution


🔷 Fork কী এবং Clone থেকে কীভাবে আলাদা?

বিষয় Clone Fork
কোথায় হয় তোমার computer-এ তোমার GitHub account-এ
Original repo-র সাথে সম্পর্ক linked (push করতে permission লাগে) independent copy
কখন ব্যবহার নিজের বা team-এর repo অন্যের project-এ contribute করতে
PR দেওয়া যায় সরাসরি fork → original-এ cross-repo PR

Open Source Contribution — Fork Workflow

# ধাপ ১: GitHub-এ "Fork" বোতামে ক্লিক করো # → Original project-এর কপি তোমার account-এ যাবে # ধাপ ২: তোমার Fork clone করো git clone git@github.com:YOUR-USERNAME/project.git cd project # ধাপ ৩: Upstream (original) remote যোগ করো git remote add upstream git@github.com:OWNER/project.git git remote -v # origin git@github.com:farid/project.git (তোমার fork) # upstream git@github.com:owner/project.git (original) # ধাপ ৪: Latest code নামাও git fetch upstream git checkout main git merge upstream/main # ধাপ ৫: নতুন branch-এ কাজ করো git checkout -b fix/typo-in-readme # ... পরিবর্তন করো ... git commit -m "fix: README-এ বানান ভুল ঠিক করা হয়েছে" # ধাপ ৬: তোমার Fork-এ push করো git push origin fix/typo-in-readme # ধাপ ৭: GitHub-এ PR দাও original repo-র দিকে # Compare & pull request → base: owner/main ← compare: farid/fix/typo

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🔁 Pull Requests — তৈরি, Review ও Merge

Pull Request (PR) হলো আধুনিক collaborative development-এর মূল পদ্ধতি। সরাসরি main-এ merge না করে PR দিলে quality নিশ্চিত হয়।


🔷 Pull Request কী এবং কেন দরকার?

Pull Request মানে — "আমার feature branch-এর পরিবর্তনগুলো main-এ নিয়ে নাও" এই formal অনুরোধ। এটি দিলে টিম সদস্যরা কোড review করতে পারে, test করতে পারে এবং approve-এর পরেই merge হয়।

PR তৈরির সম্পূর্ণ ধাপ

# ধাপ ১: Feature branch-এ কাজ শেষ করো git checkout -b feature/user-registration # ... সব কাজ করো, commit করো ... git commit -m "feat: user registration form তৈরি করা হয়েছে" git commit -m "feat: server-side validation যোগ" git commit -m "test: registration form unit tests" # ধাপ ২: GitHub-এ push করো git push -u origin feature/user-registration # ধাপ ৩: GitHub-এ যাও # → "Compare & pull request" বোতামে ক্লিক করো # → অথবা Pull requests → New pull request # ধাপ ৪: PR তৈরি করো # - Title: স্পষ্ট ও সংক্ষিপ্ত # - Description: বিস্তারিত (নিচে template দেওয়া আছে) # - Reviewers: সিনিয়র বা টিম সদস্য tag করো # - Labels: feature, bug, documentation ইত্যাদি # - Milestone যোগ করো (project management) # - Linked Issues: "Closes #42" লিখলে issue auto-close হবে

ভালো PR Description Template

## 📋 এই PR কী করে? User registration form সম্পূর্ণ implement করা হয়েছে। ## ✨ পরিবর্তনের তালিকা - `register.html` — Registration form UI - `validate.js` — Client-side validation (email, password strength) - `server.js` — API endpoint `/api/register` - `tests/` — Unit tests (coverage: 85%) ## 🧪 কীভাবে পরীক্ষা করবে? 1. `git checkout feature/user-registration` 2. `npm install` 3. `npm start` 4. Browser-এ `http://localhost:3000/register` খোলো 5. Invalid email দিয়ে submit করো — error message দেখাবে 6. সঠিক তথ্য দিয়ে submit করো — success message দেখাবে ## 📸 Screenshots (UI screenshot এখানে দাও) ## ⚠️ Notes - Password minimum 8 character, 1 uppercase, 1 number enforce করা হয়েছে - Email verification এখনো নেই — পরবর্তী PR-এ আসবে ## Closes #42, #43

🔷 PR Review Process

Review Action অর্থ ও কখন
Comment Approve/reject ছাড়া মন্তব্য। প্রশ্ন করা বা suggestion-এর জন্য।
Approve ✅ কোড ঠিক আছে, merge করতে পারো। সাধারণত ১-২ approval লাগে।
Request changes ❌ পরিবর্তন দরকার। এটা না হওয়া পর্যন্ত merge blocked।

PR Review করার সময় কী দেখবে

✅ কোডের মান: - পরিষ্কার, readable কোড? - Naming convention follow হয়েছে? - DRY principle (Don't Repeat Yourself)? ✅ Functionality: - সব edge case handle হয়েছে? - Error handling আছে? - Performance ঠিক আছে? ✅ Tests: - Test আছে? - Tests pass করছে? ✅ Security: - User input sanitize হয়েছে? - গোপন তথ্য expose হচ্ছে না তো? ❌ এগুলো বলো না: "তুমি ভুল করেছো" — ব্যক্তি-আক্রমণ শুধু "এটা ঠিক নয়" — কারণ বলো ✅ এভাবে বলো: "এখানে edge case miss হতে পারে যদি user null দেয়" "এই function আরো readable হবে যদি ছোট helper function-এ ভাগ করো"

🔷 PR Labels, Mentions, Reactions

# PR-এ Labels ব্যবহার: feature ← নতুন feature bug ← bug fix docs ← documentation wip ← Work in Progress (এখনো review করো না) ready ← review করার জন্য ready blocked ← কোনো কারণে আটকা # Mention ব্যবহার: @farid-rahman এখানে একবার দেখো @team এটা সবার জানা দরকার /cc @backend-team ← FYI # Saved Replies: # GitHub-এ সাধারণ comments save করে রাখা যায় # Settings → Saved replies

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

👁️ Code Reviews ও Contribution Guidelines


🔷 ভালো Code Review-এর সংস্কৃতি

করবে ✅ করবে না ❌
Code সমালোচনা করো, ব্যক্তি নয় "তুমি কেন এভাবে লিখলে?" — ব্যক্তি আক্রমণ
প্রশ্ন করো: "এখানে X এর কারণ কী?" "এটা ভুল।" — কারণ না বলে reject করা
Suggestion দাও: "হয়তো এভাবে করা যায়..." সব ছোট জিনিসে "Request changes" দেওয়া
ভালো কাজের প্রশংসা করো শুধু সমস্যাই বলো
PR ছোট রাখো (২০০ লাইনের কম) এক PR-এ ১০০০ লাইন বা multiple features
Context দাও কেন এই পরিবর্তন Description ছাড়া PR submit করা

CONTRIBUTING.md ফাইল

বড় প্রজেক্টে একটি CONTRIBUTING.md ফাইল রাখা ভালো অভ্যাস। নতুন contributor কীভাবে কাজ করবে তার নির্দেশনা থাকে এখানে।

# CONTRIBUTING.md-এ সাধারণত থাকে: 1. প্রজেক্ট setup করার নির্দেশনা 2. Coding style guide 3. Commit message নিয়ম 4. Branch naming নিয়ম 5. PR তৈরির নির্দেশনা 6. Issue report করার পদ্ধতি

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚡ Merge Strategies — Fast-Forward, Rebase Squash, Cherry Pick


🔷 Cherry Pick — নির্দিষ্ট Commit নেওয়া

পুরো branch merge না করে শুধু একটি বা কয়েকটি commit অন্য branch-এ নেওয়া।

# পরিস্থিতি: feature branch-এ কাজ করছো # সহকর্মী hotfix branch-এ একটি critical fix করেছে # তোমার branch-এও সেই fix দরকার # সহকর্মীর fix commit-এর hash দেখো git log hotfix/payment --oneline # a1b2c3d fix: payment crash on null user # b2c3d4e fix: minor style fix # শুধু a1b2c3d (critical fix) নাও git cherry-pick a1b2c3d # একাধিক commit নাও git cherry-pick a1b2c3d b2c3d4e # Range of commits git cherry-pick a1b2c3d..d4e5f6g # Conflict হলে সমাধান করো এবং: git cherry-pick --continue # বাতিল করতে git cherry-pick --abort

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⭐ Best Practices — পেশাদার Git ব্যবহারের অভ্যাস

ভালো Git অভ্যাস তোমার এবং পুরো টিমের জীবন সহজ করে।


🔷 Commit Best Practices

নিয়ম কেন
ছোট ছোট commit করো Revert ও review সহজ হয়, bug খুঁজে পাওয়া সহজ
এক commit-এ এক কাজ "feat: search" এবং "fix: navbar" — দুটো আলাদা commit করো
অর্থবহ message ৬ মাস পরে দেখলে বুঝতে পারবে কী হয়েছিল
Commit করার আগে diff দেখো git diff --staged — কী যাচ্ছে review করো
Debug code commit করো না console.log, temporary test code বাদ দিয়ে commit করো

🔷 Branch Best Practices

# ✅ ভালো Branch workflow: git checkout main git pull ← সবসময় আপ-টু-ডেট থেকে branch করো git checkout -b feature/my-feature # প্রতিদিন main-এর সাথে sync রাখো git fetch origin git rebase origin/main ← অথবা: git merge origin/main # ✅ Branch naming convention: feature/add-user-authentication ← হাইফেন, lowercase fix/resolve-login-redirect-loop hotfix/patch-payment-null-pointer release/v2.1.0 chore/upgrade-dependencies docs/update-api-documentation

🔷 Troubleshooting Common Problems

# সমস্যা ১: ভুল branch-এ commit করে ফেলেছো # সমাধান: cherry-pick করে সঠিক জায়গায় নাও git log --oneline ← hash দেখো git checkout correct-branch git cherry-pick wrong-commit-hash git checkout wrong-branch git reset --soft HEAD~1 ← ভুল branch থেকে সরাও # সমস্যা ২: গোপন .env file commit হয়ে গেছে! # সমাধান (push হয়নি): git rm --cached .env git commit -m "chore: .env tracking বন্ধ" echo ".env" >> .gitignore git add .gitignore git commit --amend --no-edit # Push হয়ে গেলে — GitHub secret scanning ব্যবহার করো # এবং API key/password অবিলম্বে revoke করো! # সমস্যা ৩: "detached HEAD" state-এ পড়ে গেছো git status # HEAD detached at a1b2c3d # এটা মানে তুমি কোনো branch-এ নেই git checkout main ← কোনো branch-এ ফিরে যাও # অথবা এই commit থেকে নতুন branch: git checkout -b new-branch-from-here # সমস্যা ৪: বড় file commit করে repo slow হয়ে গেছে # সমাধান: Git LFS (Large File Storage) git lfs install git lfs track "*.psd" git lfs track "*.mp4" git lfs track "*.zip" git add .gitattributes git commit -m "chore: LFS tracking যোগ করা হয়েছে"

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📦 Git Stash — অসম্পূর্ণ কাজ সরিয়ে রাখা

কাজের মাঝে জরুরি কিছু করতে হলে Stash একটা lifesaver।


🔷 Stash কেন দরকার?

বাস্তব পরিস্থিতি:
তুমি login form-এর কাজ অর্ধেক করেছো। হঠাৎ ফোন — "Production-এ payment crash করছে! এখনই ঠিক করো!"

সমস্যা: অর্ধেক কাজ commit করার মতো অবস্থায় নেই।
সমাধান: git stash করো → main-এ যাও → hotfix করো → ফিরে আসো → git stash pop!
# কাজ stash করো git stash git stash save "login form-এর অসম্পূর্ণ কাজ" # Untracked ফাইলও stash করো (new files) git stash -u git stash --include-untracked # সব stash দেখো git stash list # stash@{0}: On feature/login: login form-এর অসম্পূর্ণ কাজ # stash@{1}: On main: navbar update WIP # Stash-এর বিস্তারিত দেখো git stash show stash@{0} git stash show -p stash@{0} ← diff সহ
# Stash ফিরিয়ে আনো git stash pop ← সর্বশেষ stash (stash@{0}) আনো এবং মুছো git stash apply ← আনো কিন্তু মুছো না (একাধিক জায়গায় apply করতে) git stash apply stash@{1} ← নির্দিষ্ট stash # Stash মুছো git stash drop stash@{0} ← একটি মুছো git stash clear ← সব মুছো # Stash থেকে নতুন branch তৈরি করো git stash branch feature/login stash@{0} # নতুন branch-এ stash apply হবে

সম্পূর্ণ Stash Workflow

# ━━━━━━ কাজ করছো ━━━━━━ git checkout feature/login # ... login form-এ কাজ করছো ... # ━━━━━━ জরুরি ডাক! ━━━━━━ git stash save "login form WIP — validation বাকি" # ━━━━━━ hotfix করো ━━━━━━ git checkout main git pull git checkout -b hotfix/payment-crash # ... fix করো ... git commit -m "fix: payment null user crash সমাধান" git push origin hotfix/payment-crash # PR দাও বা direct merge করো # ━━━━━━ আগের কাজে ফিরে যাও ━━━━━━ git checkout feature/login git stash pop ← আগের অসম্পূর্ণ কাজ ফিরে আসবে!

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🕰️ History — Linear, Non-Linear, HEAD ও Detached HEAD


🔷 HEAD কী?

HEAD হলো একটি pointer যা সবসময় নির্দেশ করে তুমি এখন কোন commit-এ আছো। সাধারণত HEAD একটি branch-এর শেষ commit-এ থাকে।

# HEAD-এর বর্তমান অবস্থা দেখো cat .git/HEAD # ref: refs/heads/main ← main branch-এর শেষে # HEAD মানে তোমার বর্তমান commit git log HEAD --oneline git show HEAD ← সর্বশেষ commit git show HEAD~1 ← তার আগের commit git show HEAD~2 ← আরো একটি পিছনে # Linear History (এক সরল লাইন): A → B → C → D (HEAD → main) # Non-Linear History (branch ও merge-এর পরে): A → B → C → F (HEAD → main) ↘ D → E ↗

Detached HEAD — বিপদজনক অবস্থা

# Detached HEAD হয় যখন তুমি সরাসরি commit checkout করো: git checkout a1b2c3d ← branch-এর নাম নয়, commit hash # তারপর git status দেখো: $ git status HEAD detached at a1b2c3d # মানে: তুমি কোনো branch-এ নেই! # এই অবস্থায় commit করলে branch ছাড়া হারিয়ে যাবে! # সমাধান ১: কোনো branch-এ ফিরে যাও git checkout main # সমাধান ২: এই commit থেকে নতুন branch তৈরি করো git checkout -b explore-old-version # সমাধান ৩: আধুনিক পদ্ধতি git switch main ← switch command clearly "branch শুধু"

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🔄 Revert ও Reset — বিস্তারিত তুলনা


🔷 git reset-এর তিনটি Mode বিস্তারিত

Git Reset-এর তিনটি Mode visualize করে বোঝা: Commits: A → B → C (HEAD) তুমি এখন C-তে ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ git reset --soft HEAD~1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Repository: A → B (HEAD সরে গেল) Staging: C-র পরিবর্তন এখানে আছে ✅ Working: অপরিবর্তিত ✅ → ব্যবহার: commit message ঠিক করতে চাই, কোড রাখবো ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ git reset HEAD~1 (--mixed, default) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Repository: A → B (HEAD সরে গেল) Staging: খালি ⚪ Working: C-র পরিবর্তন এখানে আছে ✅ → ব্যবহার: পরিবর্তন রেখে নতুনভাবে stage ও commit করবো ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ git reset --hard HEAD~1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Repository: A → B (HEAD সরে গেল) Staging: খালি ⚪ Working: খালি ⚪ (C-র পরিবর্তন মুছে গেছে!) → ব্যবহার: সব বাতিল, পুরোপুরি B-তে ফিরে যাই

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📐 Rebase — History পুনর্গঠন

Rebase হলো Git-এর সবচেয়ে শক্তিশালী ও complex feature। সঠিকভাবে ব্যবহার করলে history অনেক clean হয়।


🔷 Rebase vs Merge — পার্থক্য

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Merge-এর History (দুই branch-এর merge commit দৃশ্যমান): ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ main: A ─── B ─── C ─────────── G (merge commit) \ / feature: D ─── E ─ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Rebase-এর History (straight line, পরিষ্কার): ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ main: A ─── B ─── C ─── D' ─── E' feature (rebased): D ও E main-এর উপরে নতুনভাবে apply হয়েছে (D' ও E' = নতুন hash, কিন্তু একই পরিবর্তন)
# Feature branch-কে main-এর উপরে rebase করো git checkout feature/login git rebase main # Conflict হলে: git status ← কোন ফাইলে conflict? # ... conflict সমাধান করো ... git add fixed-file.html git rebase --continue # Rebase বাতিল করো git rebase --abort # main থেকে rebase (main আপ-টু-ডেট রাখতে) git fetch origin git rebase origin/main

🔷 Interactive Rebase — History পরিষ্কার করা

কাজ করার সময় অনেক ছোট commit হয়। PR দেওয়ার আগে সেগুলো পরিষ্কার করতে Interactive Rebase দারুণ।

# শেষ ৪টি commit interactive mode-এ দেখো git rebase -i HEAD~4 # Editor খুলবে: pick a1b2c3d feat: login form HTML pick b2c3d4e fix: typo in form label pick c3d4e5f style: login button রঙ pick d4e5f6g feat: form validation # Commands: # pick = এই commit রাখো (পরিবর্তন নেই) # reword = এই commit রাখো কিন্তু message পরিবর্তন করো # squash = আগের commit-এর সাথে মিলিয়ে দাও # fixup = squash-এর মতো, কিন্তু message নেবে না # drop = এই commit বাতিল করো # edit = এই commit-এ থামো এবং amend করো
# উদাহরণ: typo fix কে squash করো login-এর সাথে # আগে: pick a1b2c3d feat: login form HTML pick b2c3d4e fix: typo in form label ← এটা নিজে commit দরকার নেই pick c3d4e5f style: login button রঙ pick d4e5f6g feat: form validation # পরিবর্তন করো: pick a1b2c3d feat: login form HTML fixup b2c3d4e fix: typo in form label ← squash + message ফেলো pick c3d4e5f style: login button রঙ pick d4e5f6g feat: form validation # Save করলে b2c3d4e → a1b2c3d-এ মিলে যাবে
# git commit --amend # শেষ commit পরিবর্তন করতে: # Message ঠিক করো git commit --amend -m "feat: login form HTML — email ও password field" # ভুলে file add করতে ভুলেছিলে git add forgotten-file.css git commit --amend --no-edit # ⚠️ amend করলে commit hash পরিবর্তন হয় # Push হয়ে গেলে amend করো না
# git filter-branch / git filter-repo # সব history থেকে একটি ফাইল পুরোপুরি মুছতে # (sensitive data মুছার জন্য): # আধুনিক পদ্ধতি (git-filter-repo ইনস্টল করতে হবে) git filter-repo --path passwords.txt --invert-paths # ⚠️ এটি সব commit hash পরিবর্তন করে! # force push লাগবে এবং সবাইকে re-clone করতে হবে
⚠️ Rebase-এর সোনালী নিয়ম:
Public/shared branch-এ কখনো rebase করো না। main, develop, বা যেকোনো branch যা অন্যরা use করে — সেখানে rebase করলে অন্যদের history পরিবর্তন হয়ে যায় এবং বড় সমস্যা হয়।
শুধু তোমার নিজের local/private branch-এ rebase করো।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🏷️ Tagging ও GitHub Releases — Version চিহ্নিত করা

Software version release করার সময় Tag দিয়ে সেই commit চিরতরে চিহ্নিত করো।


🔷 Tag কী এবং কেন দরকার?

Tag হলো একটি নির্দিষ্ট commit-এর উপরে দেওয়া permanent label। Branch-এর মতো সরে যায় না। Software release করার সময় v1.0.0, v2.1.3 এভাবে tag দেওয়া হয়।

Tag ধরন বৈশিষ্ট্য কখন ব্যবহার
Lightweight Tag শুধু commit hash-এর alias, কোনো metadata নেই private, temporary marking
Annotated Tag Full object — tagger, date, message আছে public release-এর জন্য সঠিক
# Annotated tag তৈরি (release-এর জন্য সঠিক পদ্ধতি) git tag -a v1.0.0 -m "Version 1.0.0 — প্রথম stable release নতুন features: - User authentication - Product listing - Shopping cart - Payment integration Bug fixes: - Mobile navbar rendering - Email validation" # Lightweight tag (দ্রুত, private) git tag v1.0.0-beta # সব tag দেখো git tag git tag -l "v1.*" ← v1 দিয়ে শুরু সব tag # একটি tag-এর বিবরণ দেখো git show v1.0.0 # পুরনো commit-এ tag দাও git tag -a v0.9.0 a1b2c3d -m "Beta release"
# Tag GitHub-এ push করো git push origin v1.0.0 ← একটি tag git push origin --tags ← সব tag # Tag মুছো git tag -d v1.0.0-beta ← local git push origin --delete v1.0.0-beta ← remote # Tag-এ checkout করো (Detached HEAD হবে) git checkout v1.0.0 # → "You are in 'detached HEAD' state"

Semantic Versioning (SemVer) — নিয়ম মেনে Version

Format: MAJOR.MINOR.PATCH উদাহরণ: v2.4.1 MAJOR (2): Breaking changes — পুরনো code কাজ নাও করতে পারে MINOR (4): নতুন feature — backward compatible PATCH (1): Bug fix — backward compatible উদাহরণ: v1.0.0 → প্রথম stable release v1.1.0 → নতুন feature যোগ (backward compatible) v1.1.1 → bug fix v2.0.0 → API পরিবর্তন হয়েছে (breaking change) Pre-release: v2.0.0-alpha.1 → early testing v2.0.0-beta.3 → broader testing v2.0.0-rc.1 → release candidate

GitHub Releases

# GitHub Releases = Tag + Release Notes + Binary attachments # GitHub-এ Release তৈরি: # Releases → Draft a new release # → Tag: v1.0.0 (নতুন বা বিদ্যমান tag) # → Release title: "Version 1.0.0 — First Stable Release" # → Description: changelog, new features, breaking changes # → Attachments: compiled binary, zip file ইত্যাদি # → Publish release ক্লিক করো

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🪝 Git Hooks — Automated Scripts

Git Hooks দিয়ে commit, push ইত্যাদি ঘটনার সময় স্বয়ংক্রিয়ভাবে script চালানো যায়।


🔷 Git Hooks কী এবং কেন?

Git Hooks হলো automatic scripts যা নির্দিষ্ট Git ঘটনার আগে বা পরে চলে। এই দিয়ে quality control enforce করা যায় — যেমন commit-এর আগে lint check, push-এর আগে tests চালানো।

Hook নাম কখন চলে সাধারণ ব্যবহার
pre-commit commit শুরু হওয়ার আগে Lint check, code formatting, secret detection
commit-msg Commit message লেখার পরে Commit message format যাচাই (conventional commits)
pre-push Push-এর আগে Tests run করা, build যাচাই
post-checkout checkout-এর পরে Dependencies install notify করা
post-update Server-এ push-এর পরে (server-side) Notification পাঠানো, CI trigger করা
# Hooks কোথায় থাকে? ls .git/hooks/ # pre-commit.sample # commit-msg.sample # pre-push.sample # ... (সব sample — .sample suffix মুছলে active হয়) # একটি pre-commit hook তৈরি করো: cat > .git/hooks/pre-commit << 'HOOK' #!/bin/sh # Commit-এর আগে এই script চলবে echo "🔍 Code quality check চলছে..." # ESLint check if command -v npm >/dev/null; then npm run lint 2>&1 if [ $? -ne 0 ]; then echo "❌ Lint errors আছে! Commit বাতিল।" echo "🔧 'npm run lint:fix' চালাও এবং আবার try করো।" exit 1 fi fi echo "✅ সব check pass! Commit করা হচ্ছে..." exit 0 HOOK # Executable করো (অবশ্যই) chmod +x .git/hooks/pre-commit

Husky — Node.js Projects-এ সহজ Hook Management

# Husky ইনস্টল করো npm install --save-dev husky # Husky initialize করো npx husky init # .husky/pre-commit ফাইল তৈরি হবে: echo "npm run lint" > .husky/pre-commit echo "npm test" >> .husky/pre-commit # .husky/commit-msg hook (conventional commits check): echo 'npx --no -- commitlint --edit "$1"' > .husky/commit-msg # এখন: # - প্রতিটি commit-এর আগে lint চলবে # - Lint fail করলে commit হবে না

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚡ GitHub Actions — CI/CD Automation

GitHub Actions দিয়ে code push হলে স্বয়ংক্রিয়ভাবে test, build ও deploy করা যায়।


🔷 GitHub Actions কী?

GitHub Actions হলো GitHub-এর built-in CI/CD (Continuous Integration / Continuous Deployment) platform। তুমি YAML ফাইলে define করো কখন কী করবে — push হলে, PR দিলে, বা schedule-এ।

উপাদান বিবরণ
Workflow একটি YAML ফাইল যেখানে সব কিছু define করা আছে
Trigger (on:) কখন workflow চলবে — push, PR, schedule, manual
Job Workflow-এর একটি অংশ যা Runner-এ চলে
Step Job-এর প্রতিটি ধাপ
Action Reusable script বা GitHub Marketplace থেকে
Runner যে machine-এ workflow চলে (ubuntu, windows, mac)

🔷 YAML Syntax — Workflow লেখার নিয়ম

# ফাইলের অবস্থান: .github/workflows/ci.yml name: CI — Code Quality Check # Workflow-এর নাম on: # Trigger push: # push-এ চলবে branches: [ main, develop ] # শুধু এই branches-এ pull_request: # PR-এও চলবে branches: [ main ] jobs: # Jobs তালিকা quality-check: # Job-এর নাম runs-on: ubuntu-latest # Runner steps: - name: কোড checkout করো uses: actions/checkout@v4 # Marketplace Action - name: Node.js setup করো uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Dependencies ইনস্টল করো run: npm ci - name: Lint check করো run: npm run lint - name: Tests চালাও run: npm test - name: Build করো run: npm run build

Workflow Triggers বিস্তারিত

on: # Push-এ trigger push: branches: [ main ] paths: - 'src/**' ← শুধু src/ পরিবর্তন হলে # PR-এ trigger pull_request: types: [ opened, synchronize, reopened ] # Schedule (cron) — রাত ২টায় schedule: - cron: '0 2 * * *' # Manual trigger (GitHub UI বা API থেকে) workflow_dispatch: inputs: environment: description: 'Deploy environment' required: true default: 'staging' # Tag push-এ push: tags: - 'v*' ← v দিয়ে শুরু সব tag

Secrets ও Environment Variables

# GitHub → Settings → Secrets → New repository secret # API_KEY = "your-secret-key" # Workflow-এ ব্যবহার: jobs: deploy: runs-on: ubuntu-latest steps: - name: Deploy করো env: API_KEY: ${{ secrets.API_KEY }} ← Encrypted secret NODE_ENV: production ← সাধারণ variable run: npm run deploy

Caching — Speed বাড়াও

steps: - uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- # Cache hit হলে npm install অনেক দ্রুত হয় # 2-3 মিনিট → 20-30 সেকেন্ড

GitHub Pages Deploy করা

# .github/workflows/deploy.yml name: Deploy to GitHub Pages on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest permissions: contents: read pages: write id-token: write steps: - uses: actions/checkout@v4 - name: Pages setup uses: actions/configure-pages@v4 - name: Build করো run: npm run build - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: path: './dist' - name: Deploy to GitHub Pages uses: actions/deploy-pages@v4

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🚀 Advanced Git Topics

এখানে আরো কিছু গুরুত্বপূর্ণ advanced topic — Git Submodules, Git LFS, Bisect, Reflog ইত্যাদি।


🔷 Git Submodules — Repository-র ভিতরে Repository

বড় project-এ কখনো অন্য Git repository কে "sub-project" হিসেবে যোগ করতে হয়। উদাহরণ: তোমার main project-এ একটি shared UI library যোগ করা।

# Submodule যোগ করো git submodule add git@github.com:org/ui-library.git libs/ui # Submodule সহ clone করো git clone --recurse-submodules git@github.com:username/project.git # বিদ্যমান clone-এ submodule initialize করো git submodule init git submodule update # সব submodule আপডেট করো git submodule update --remote

🔷 Git Bisect — Bug কোন Commit-এ এলো?

হাজার commit-এর মধ্যে কোনটিতে bug এলো তা binary search-এর মাধ্যমে খুঁজে বের করা।

# Git bisect শুরু করো git bisect start # বর্তমান commit buggy বলো git bisect bad HEAD # কোনো পুরনো ভালো commit বলো git bisect good v1.0.0 # Git মাঝের commit checkout করবে # → তুমি test করো, bug আছে কিনা git bisect bad ← bug আছে git bisect good ← bug নেই # Git আবার মাঝের দিকে যাবে — binary search! # ৩০ commits = মাত্র ৫ বার check করলেই পাওয়া যাবে # Bug পেয়ে গেলে git bisect reset ← HEAD-এ ফিরে যাও

🔷 Git LFS — বড় ফাইল Handle করা

Git সাধারণত text file-এর জন্য তৈরি। বড় binary file (PSD, video, database dump) commit করলে repository অনেক বড় হয়ে যায়। Git LFS (Large File Storage) এই সমস্যা সমাধান করে।

# Git LFS install করো git lfs install # কোন ধরনের ফাইল LFS-এ রাখবে git lfs track "*.psd" git lfs track "*.mp4" git lfs track "*.zip" git lfs track "*.pdf" # .gitattributes তৈরি হবে — এটা commit করো git add .gitattributes git commit -m "chore: Git LFS tracking configure করা হয়েছে" # LFS-tracked ফাইল দেখো git lfs ls-files # LFS status git lfs status

🔷 GitHub Workflow ও CLI

# GitHub CLI ইনস্টল করো # Windows: winget install --id GitHub.cli # macOS: brew install gh # Linux: https://cli.github.com/ # Login করো gh auth login # Repository management gh repo create my-project --public ← নতুন repo gh repo clone username/repo ← clone gh repo list ← তোমার সব repo # Issue management gh issue list gh issue create --title "Bug: login crash" --body "..." gh issue close 42 # Pull Request gh pr create --title "feat: search" --body "..." gh pr list gh pr merge 15 --squash # Workflow দেখো gh run list gh run view 12345

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📝 Markdown ও Documentation

GitHub-এ ভালো documentation লেখা একজন পেশাদার ডেভেলপারের অন্যতম গুরুত্বপূর্ণ দক্ষতা।


🔷 Markdown কী এবং কেন শিখবে?

Markdown হলো একটি lightweight markup language যা plain text-কে সুন্দর formatted document-এ রূপান্তরিত করে। GitHub-এ README, Issues, PR, Wiki — সব জায়গায় Markdown ব্যবহার হয়।

# শিরোনাম (Heading) # H1 — সবচেয়ে বড় ## H2 ### H3 #### H4 # Bold ও Italic **এটা bold** *এটা italic* ***এটা bold italic*** # List - আইটেম ১ - আইটেম ২ - nested আইটেম 1. প্রথম 2. দ্বিতীয় 3. তৃতীয় # Link ও Image [লিংক টেক্সট](https://example.com) ![Alt text](image.png) # Code `inline code` ```javascript // code block const x = 10; ``` # Table | নাম | বয়স | |---------|-----| | ফরীদ | 25 | | রাহেলা | 30 | # Blockquote > এটা একটা quote # Horizontal Rule ---

🔷 Project README — ভালো README কীভাবে লিখবে?

একটি ভালো README হলো তোমার project-এর "মুখপাত্র"। নতুন কেউ project দেখলেই বুঝতে পারবে এটা কী।

# Project Name একটি সংক্ষিপ্ত description — project কী করে। ## 🚀 Features - Feature ১ - Feature ২ ## 📦 Installation ```bash git clone https://github.com/username/project.git cd project npm install ``` ## 🔧 Usage ```bash npm start ``` ## 🤝 Contributing Pull requests welcome! [CONTRIBUTING.md](CONTRIBUTING.md) দেখো। ## 📄 License [MIT](LICENSE)
ভালো README-তে যা থাকা উচিত:

Project-এর নাম ও এক লাইনের বিবরণ → Installation guide → Usage example → Contributing guide → License

🔷 GitHub Wikis

Wiki হলো project-এর বিস্তারিত documentation-এর জন্য। README-তে সব লেখা সম্ভব না — সেক্ষেত্রে Wiki ব্যবহার করো।

# Wiki enable করো # → Repository → Settings → Features → Wikis চালু করো # Wiki তৈরি করো # → Repository → Wiki → New Page # Wiki clone করো (locally edit করতে) git clone https://github.com/username/project.wiki.git
Wiki vs README:

README → project-এর সংক্ষিপ্ত পরিচয়, installation, basic usage
Wiki → বিস্তারিত API docs, architecture, tutorials, FAQ

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🏢 GitHub Organizations ও Projects

Team-এ কাজ করতে হলে GitHub Organizations ও Projects ব্যবহার করতে শেখা অপরিহার্য।


🔷 GitHub Organizations কী?

Organization হলো একটি shared account যেখানে একাধিক ডেভেলপার একসাথে কাজ করতে পারে। Company বা open source project-এ সাধারণত Organization ব্যবহার হয়।

# Organization তৈরি করো # → GitHub → (+) → New organization # Organization-এ Repository তৈরি # → Organization page → New repository # Member যোগ করো # → Organization → People → Invite member # Team তৈরি করো # → Organization → Teams → New team # Team-কে নির্দিষ্ট repository-তে access দাও
⚠️ Permission Levels:

Read: শুধু দেখতে পারবে
Triage: Issues ও PR manage করতে পারবে
Write: Push করতে পারবে
Maintain: Repository settings manage করতে পারবে
Admin: সম্পূর্ণ access

🔷 GitHub Projects — Kanban Board

GitHub Projects হলো built-in project management tool। Issues ও PR-কে Kanban board বা Table view-তে সাজিয়ে track করা যায়।

# Project তৈরি করো # → Repository বা Organization → Projects → New project # View টাইপ: # Board (Kanban) — Todo / In Progress / Done # Table — spreadsheet-এর মতো # Roadmap — timeline view # Issue কে Project-এ যোগ করো # → Issue → Projects → Project select করো # Automation সেট করো # → Project → Settings → Workflows # উদাহরণ: Issue closed হলে "Done" column-এ যাবে
GitHub Projects ব্যবহারের সুবিধা:

Issues, PR, ও custom tasks একসাথে track করা যায়। Custom fields যোগ করা যায় (Priority, Sprint, Estimate)। Roadmap view-তে deadline ও milestone দেখা যায়।

🔷 GitHub Discussions

Discussions হলো community conversation-এর জায়গা। Issues-এ bug ও feature request থাকে, আর Discussions-এ প্রশ্ন, আলোচনা, announcement থাকে।

# Discussions enable করো # → Repository → Settings → Features → Discussions চালু করো # Category তৈরি করো # → Discussions → New category # উদাহরণ: Q&A, Ideas, Announcements, General # Discussion তৈরি করো # → Discussions → New discussion → Category select → লেখো # Q&A তে Answer mark করো # → কোনো reply-তে "Mark as answer" ক্লিক করো

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

✨ GitHub Gists, Packages ও Sponsors

GitHub-এর আরো কিছু দরকারি feature যা ডেভেলপারদের কাজে আসে।


🔷 GitHub Gists — কোড Snippet শেয়ার করো

Gist হলো ছোট ছোট code snippet বা note শেয়ার করার জন্য। পুরো repository না বানিয়ে একটা ফাইল বা কয়েক লাইন কোড শেয়ার করতে চাইলে Gist ব্যবহার করো।

# Gist তৈরি করো # → gist.github.com → New gist # Public Gist — সবাই দেখতে পারবে, search-এ আসবে # Secret Gist — শুধু link জানলে দেখা যাবে # CLI দিয়ে Gist তৈরি করো gh gist create script.js --public gh gist create script.js --desc "Useful utility function" # Gist list দেখো gh gist list # Gist clone করো (edit করতে) git clone https://gist.github.com/<gist-id>.git
Gist কখন ব্যবহার করবে:

Config files শেয়ার করতে → dotfiles, .bashrc, settings.json
Quick script শেয়ার করতে → automation, utility functions
Notes বা cheatsheet রাখতে → Markdown Gist

🔷 GitHub Packages — Package Registry

GitHub Packages হলো software package publish ও consume করার জায়গা। npm, Docker, Maven, NuGet — সব ধরনের package publish করা যায়।

# npm package publish করো GitHub Packages-এ # ১. .npmrc ফাইল তৈরি করো echo "@your-org:registry=https://npm.pkg.github.com" >> .npmrc # ২. package.json-এ name ঠিক করো { "name": "@your-org/your-package", "version": "1.0.0" } # ৩. GitHub token দিয়ে login করো npm login --registry=https://npm.pkg.github.com # ৪. Publish করো npm publish # অন্য project-এ install করো npm install @your-org/your-package

🔷 GitHub Sponsors — Open Source সাপোর্ট করো

GitHub Sponsors দিয়ে তুমি পছন্দের open source developer বা project-কে আর্থিক সহায়তা করতে পারো। নিজেও Sponsor হওয়ার যোগ্যতা অর্জন করতে পারো।

# Sponsor হওয়ার যোগ্যতা পেতে # → github.com/sponsors → Join the waitlist # → Profile সম্পূর্ণ করো, bank details যোগ করো # কাউকে Sponsor করো # → যেকোনো profile → "Sponsor" বোতামে ক্লিক করো # → Monthly বা one-time amount নির্বাচন করো # Sponsor badge profile-এ দেখাবে # Repository-তেও FUNDING.yml দিয়ে sponsor link যোগ করা যায়
# .github/FUNDING.yml github: [your-username] patreon: your-patreon open_collective: your-collective

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

☁️ GitHub Codespaces ও Education

Cloud-এ code করো এবং student হিসেবে বিশেষ সুবিধা উপভোগ করো।


🔷 GitHub Codespaces — Browser-এ VS Code

Codespaces হলো cloud-based development environment। Local computer-এ কিছু install না করেই browser থেকে VS Code-এর মতো environment পাবে।

# Codespace খোলো # → যেকোনো Repository → Code → Codespaces → Create codespace # অথবা keyboard shortcut # → Repository page-এ থেকে . (dot) চাপো # → Browser-এ VS Code খুলে যাবে! # Codespace থেকে terminal-এ কাজ করো git add . git commit -m "feat: browser থেকে commit!" git push # Codespace বন্ধ করো (billing থামাতে) # → Codespaces → Stop codespace
Codespaces কখন কাজে লাগে:

নতুন computer-এ setup ছাড়াই কাজ শুরু করতে → Interview coding test-এ → অন্যের machine থেকে নিজের project-এ কাজ করতে → Slow computer থেকে heavy project run করতে

🔷 GitHub Education — Student Developer Pack

Student হলে GitHub Education থেকে বিনামূল্যে অনেক paid tool পাওয়া যায়।

# Student Developer Pack পেতে # → education.github.com → Get student benefits # → .edu email বা student ID দিয়ে verify করো # কী কী পাবে (কিছু উদাহরণ): # ✅ GitHub Pro — private repository unlimited # ✅ GitHub Copilot — AI code assistant বিনামূল্যে # ✅ Namecheap — ১ বছর বিনামূল্যে domain # ✅ JetBrains IDEs — সব IDE বিনামূল্যে # ✅ DigitalOcean — $200 credit # ✅ Microsoft Azure — $100 credit
GitHub Classroom:

শিক্ষকরা GitHub Classroom দিয়ে programming assignment দিতে পারেন। প্রতিটি student-এর জন্য automatically repository তৈরি হয়, submission track করা যায়।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🔒 GitHub Security ও Copilot

কোডকে নিরাপদ রাখো এবং AI দিয়ে দ্রুত কোড লেখো।


🔷 GitHub Security

GitHub-এ repository-র security নিশ্চিত করার বেশ কিছু built-in tool আছে।

Dependabot — Dependency আপডেট রাখো

# .github/dependabot.yml তৈরি করো version: 2 updates: - package-ecosystem: "npm" directory: "/" schedule: interval: "weekly" # Dependabot প্রতি সপ্তাহে outdated package-এর # জন্য automatically PR তৈরি করবে

Secret Scanning — Leaked Secret ধরো

# GitHub automatically scan করে: # → API keys, passwords, tokens যদি commit-এ থাকে # → Alert পাঠায় এবং কখনো secret revoke করে দেয় # ভুলে secret commit হয়ে গেলে git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch config.env" \ --prune-empty --tag-name-filter cat -- --all # Secret immediately revoke করো (সবচেয়ে জরুরি) # তারপর নতুন secret generate করো
⚠️ কখনো এগুলো commit করবে না:

API keys, passwords, database URLs, private keys (.pem), AWS/GCP credentials → এগুলো সবসময় .env ফাইলে রাখো এবং .gitignore-এ যোগ করো।

Code Scanning — Vulnerability খোঁজো

# GitHub Advanced Security → Code scanning enable করো # → Repository → Settings → Security → Code scanning # → CodeQL Analysis — GitHub-এর নিজস্ব tool # → Automatically PR-এ vulnerability detect করে

🔷 GitHub Copilot — AI Code Assistant

GitHub Copilot হলো AI-powered code completion tool। তুমি comment লিখলে বা কোড শুরু করলে Copilot পরের অংশ suggest করে।

# Copilot install করো # → VS Code → Extensions → "GitHub Copilot" install করো # → GitHub account দিয়ে login করো # Copilot ব্যবহার করো # → কোড লেখা শুরু করো, suggestion আসবে # → Tab চাপো → suggestion accept করো # → Esc চাপো → reject করো # → Alt+] / Alt+[ → পরের/আগের suggestion # Comment দিয়ে কোড generate করো: # একটি function লেখো যা array থেকে duplicate সরায় # Copilot পুরো function লিখে দেবে!
GitHub Models:

GitHub Models দিয়ে সরাসরি GitHub-এ বিভিন্ন AI model (GPT-4o, Claude, Llama) try করা যায়। → github.com/marketplace/models → Model select → Playground-এ test করো

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚙️ GitHub API ও Developer Tools

GitHub-কে programmatically control করো — automation, integration, আর custom app তৈরি করো।


🔷 GitHub REST API

GitHub REST API দিয়ে repositories, issues, pull requests, users — সব কিছু programmatically access করা যায়।

# Personal Access Token তৈরি করো # → Settings → Developer settings → Personal access tokens → Generate # Repository list দেখো curl -H "Authorization: token YOUR_TOKEN" \ https://api.github.com/user/repos # নতুন Issue তৈরি করো curl -X POST \ -H "Authorization: token YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title":"Bug: login crash","body":"বিস্তারিত..."}' \ https://api.github.com/repos/username/repo/issues # JavaScript দিয়ে (Octokit) import { Octokit } from "@octokit/rest"; const octokit = new Octokit({ auth: "YOUR_TOKEN" }); const { data } = await octokit.rest.issues.create({ owner: "username", repo: "my-repo", title: "New Issue", body: "Issue body এখানে" });

🔷 GitHub GraphQL API

REST API-তে একসাথে অনেক request করতে হয়। GraphQL API দিয়ে একটি request-এ ঠিক যা দরকার তাই নিয়ে আসা যায়।

# GraphQL Explorer: docs.github.com/en/graphql/overview/explorer # উদাহরণ Query — user ও তার repositories query { viewer { login repositories(first: 5, orderBy: {field: UPDATED_AT, direction: DESC}) { nodes { name stargazerCount primaryLanguage { name } } } } } # JavaScript দিয়ে const response = await fetch("https://api.github.com/graphql", { method: "POST", headers: { Authorization: `bearer ${token}` }, body: JSON.stringify({ query }) });

🔷 GitHub Apps ও Webhooks

GitHub Apps ও OAuth Apps তৈরি করে third-party integration বানানো যায়। Webhooks দিয়ে GitHub event-এ automatic action trigger করা যায়।

Webhooks

# Webhook তৈরি করো # → Repository → Settings → Webhooks → Add webhook # Payload URL: তোমার server-এর URL # Content type: application/json # Events: push, pull_request, issues — যা দরকার # তোমার server-এ receive করো (Node.js) app.post("/webhook", (req, res) => { const event = req.headers["x-github-event"]; const payload = req.body; if (event === "push") { console.log(`Push to: ${payload.repository.name}`); // Auto deploy trigger করো! } res.status(200).send("OK"); });

GitHub Apps তৈরি

# GitHub App তৈরি করো # → Settings → Developer settings → GitHub Apps → New GitHub App # → App name, Homepage URL, Webhook URL দাও # → Permissions select করো (read/write issues, PR, code ইত্যাদি) # → Private key download করো

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🛠️ Git Patch, Worktree ও Attributes

Git-এর কিছু কম পরিচিত কিন্তু কাজের advanced feature।


🔷 Git Patch — Email বা File দিয়ে Changes শেয়ার করো

Git Patch দিয়ে changes-কে একটি ফাইলে রপ্তানি করা যায় এবং অন্য repository-তে apply করা যায়। GitHub access ছাড়া changes শেয়ার করার পুরনো কিন্তু কার্যকর পদ্ধতি।

# শেষ ১টি commit-এর patch তৈরি করো git format-patch -1 HEAD # শেষ ৩টি commit-এর patch git format-patch -3 HEAD # নির্দিষ্ট commit range git format-patch main..feature-branch # Patch apply করো git apply 0001-feat-add-search.patch # am দিয়ে apply (commit সহ) git am 0001-feat-add-search.patch # Patch preview দেখো (apply না করে) git apply --check 0001-feat-add-search.patch

🔷 Git Worktree — একসাথে একাধিক Branch-এ কাজ করো

সাধারণত একটি repository-তে একবারে একটাই branch checkout করা যায়। Git Worktree দিয়ে একই repository-র একাধিক branch আলাদা folder-এ একসাথে open রাখা যায়।

# নতুন worktree তৈরি করো (branch সহ) git worktree add ../project-hotfix hotfix/login-bug # বিদ্যমান branch-এর worktree git worktree add ../project-feature feature/search # সব worktree দেখো git worktree list # Worktree সরাও git worktree remove ../project-hotfix # Worktree prune করো (deleted folder cleanup) git worktree prune
Worktree কখন কাজে লাগে:

Feature develop করতে করতে hotfix লাগলে → stash না করে আলাদা folder-এ fix করো। দুটো version একসাথে compare করতে হলে → দুটো folder পাশাপাশি খোলো।

🔷 Git Attributes — ফাইল-ভিত্তিক নিয়ম

.gitattributes ফাইলে নির্দিষ্ট ফাইল বা ফাইল-type-এর জন্য বিশেষ নিয়ম সেট করা যায়।

# .gitattributes ফাইল তৈরি করো # Line ending normalize করো (Windows/Mac/Linux) * text=auto *.bat text eol=crlf *.sh text eol=lf # Binary ফাইল mark করো (diff দেখাবে না) *.png binary *.jpg binary *.pdf binary *.zip binary # Merge strategy নির্দিষ্ট করো package-lock.json merge=ours # Diff driver কাস্টম করো *.md diff=markdown # Export-ignore (zip/archive-এ বাদ দাও) .github export-ignore tests/ export-ignore *.md export-ignore
.gitattributes-এর সবচেয়ে গুরুত্বপূর্ণ ব্যবহার:

Team-এ Windows ও Mac ডেভেলপার একসাথে কাজ করলে line ending conflict হয়। * text=auto দিলে Git automatically normalize করে।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🌐 Repo Hosting Services

Git শুধু একটি tool — কোড online-এ রাখতে ও team-এ কাজ করতে দরকার একটি Hosting Service। চলো দেখি কোনটা কখন ব্যবহার করবে।


🔷 Hosting Services তুলনা — এক নজরে

Feature GitHub GitLab Bitbucket Azure DevOps Gitea
মালিক Microsoft GitLab Inc. Atlassian Microsoft Community (OSS)
Free Plan ✅ উদার ✅ উদার ✅ সীমিত ✅ সীমিত ✅ সম্পূর্ণ বিনামূল্যে
Self-hosting ❌ (Enterprise only) ✅ GitLab CE ✅ Data Center ✅ Azure Server ✅ সহজ
CI/CD GitHub Actions GitLab CI (built-in) Bitbucket Pipelines Azure Pipelines Gitea Actions
Issue Tracking ✅ উন্নত ✅ Jira integration ✅ Azure Boards ✅ Basic
Open Source Community ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐⭐
কে বেশি ব্যবহার করে সবাই Enterprise, DevOps team Atlassian ecosystem Microsoft / .NET team Private server চাইলে

🔷 GitHub — সবচেয়ে জনপ্রিয়

GitHub হলো বিশ্বের সবচেয়ে বড় code hosting platform। ৯০%+ open source project এখানে থাকে। নতুন ডেভেলপার থেকে শুরু করে Google, Microsoft, Meta — সবাই GitHub ব্যবহার করে।

কেন GitHub বেছে নেবে?

✅ সবচেয়ে বড় developer community ✅ GitHub Actions — শক্তিশালী CI/CD ✅ GitHub Pages — বিনামূল্যে static site hosting ✅ GitHub Copilot — AI code assistant ✅ GitHub Marketplace — হাজার হাজার integrations ✅ Student Developer Pack — বিনামূল্যে অনেক paid tool ✅ Open source contribute করার সেরা জায়গা

শুরু করো

# ১. github.com-এ account তৈরি করো # ২. New repository তৈরি করো # ৩. Local project connect করো git remote add origin https://github.com/username/repo.git git push -u origin main
কখন GitHub বেছে নেবে:

Open source project করতে চাইলে → Open source community-তে contribute করতে চাইলে → Portfolio বানাতে চাইলে → যেকোনো personal বা team project-এ

🔷 GitLab — DevOps-এর সব কিছু এক জায়গায়

GitLab হলো একটি complete DevOps platform। শুধু code hosting না — planning থেকে শুরু করে deployment পর্যন্ত সব কিছু GitLab-এ করা যায়। এটি নিজেই open source।

GitLab-এর বিশেষ সুবিধা

✅ Built-in CI/CD — আলাদা tool লাগে না ✅ Self-hosting বিনামূল্যে (GitLab Community Edition) ✅ Built-in Container Registry — Docker image রাখো ✅ Built-in Package Registry ✅ Advanced Issue tracking ও Epics ✅ Built-in Security scanning (SAST, DAST) ✅ Free private repositories (unlimited)

GitLab CI/CD — উদাহরণ

# .gitlab-ci.yml stages: - test - build - deploy test: stage: test script: - npm install - npm test build: stage: build script: - npm run build deploy: stage: deploy script: - echo "Deploying to server..." only: - main
কখন GitLab বেছে নেবে:

নিজের server-এ host করতে চাইলে → Complete DevOps pipeline দরকার হলে → Enterprise team-এ কাজ করলে → GitHub-এর বিকল্প চাইলে

🔷 Bitbucket — Atlassian Ecosystem-এর জন্য

Bitbucket হলো Atlassian-এর product। যদি তোমার team Jira বা Confluence ব্যবহার করে, তাহলে Bitbucket স্বাভাবিকভাবেই মানানসই।

Bitbucket-এর বিশেষ সুবিধা

✅ Jira integration — issue ও commit সরাসরি link ✅ Confluence integration — documentation ✅ Bitbucket Pipelines — CI/CD ✅ Small team-এ (৫ জন পর্যন্ত) বিনামূল্যে ✅ Code Insights — PR-এ quality report ✅ IP whitelisting — enterprise security

Bitbucket Pipelines — উদাহরণ

# bitbucket-pipelines.yml pipelines: default: - step: name: Test image: node:18 script: - npm install - npm test - step: name: Deploy script: - echo "Deploying..." trigger: manual
কখন Bitbucket বেছে নেবে:

Team ইতোমধ্যে Jira ব্যবহার করলে → Atlassian ecosystem-এ থাকলে → ছোট private team-এ কাজ করলে

🔷 Azure DevOps — Microsoft Ecosystem-এর জন্য

Azure DevOps হলো Microsoft-এর complete DevOps suite। Azure Repos হলো এর Git hosting অংশ। .NET, C#, বা Microsoft technology stack ব্যবহার করলে এটি সবচেয়ে ভালো মানায়।

Azure DevOps-এর বিশেষ সুবিধা

✅ Azure Repos — Git hosting ✅ Azure Pipelines — শক্তিশালী CI/CD (GitHub-এও কাজ করে!) ✅ Azure Boards — Scrum/Kanban project management ✅ Azure Artifacts — Package management ✅ Azure Test Plans — Testing ✅ Microsoft ও .NET ecosystem-এর সাথে নিবিড় integration ✅ ৫ জন পর্যন্ত বিনামূল্যে

Azure Pipelines — উদাহরণ

# azure-pipelines.yml trigger: - main pool: vmImage: ubuntu-latest steps: - task: NodeTool@0 inputs: versionSpec: '18.x' - script: npm install displayName: 'Install dependencies' - script: npm test displayName: 'Run tests' - script: npm run build displayName: 'Build'
কখন Azure DevOps বেছে নেবে:

Microsoft / Azure cloud ব্যবহার করলে → .NET বা C# project-এ → Enterprise corporate environment-এ → Azure services-এর সাথে tight integration দরকার হলে

🔷 Gitea — নিজের Server-এ Git

Gitea হলো lightweight, self-hosted Git service। মাত্র একটি binary file — Raspberry Pi-তেও চলে! Internet connection ছাড়া বা সম্পূর্ণ private environment-এ Git hosting দরকার হলে Gitea সেরা।

Gitea-র বিশেষ সুবিধা

✅ সম্পূর্ণ বিনামূল্যে ও open source ✅ হালকা — কম RAM ও CPU লাগে ✅ সহজ installation — একটি binary বা Docker ✅ GitHub-এর মতো interface ✅ Gitea Actions — GitHub Actions-এর মতো CI/CD ✅ Data সম্পূর্ণ নিজের server-এ থাকে (privacy) ✅ GitHub / GitLab থেকে migrate করা সহজ

Docker দিয়ে Gitea চালাও

# docker-compose.yml version: "3" services: gitea: image: gitea/gitea:latest ports: - "3000:3000" # Web interface - "222:22" # SSH volumes: - ./gitea-data:/data restart: always # চালাও docker compose up -d # এখন browser-এ যাও: http://localhost:3000

Binary দিয়ে Install (Linux)

# Download করো wget https://dl.gitea.com/gitea/latest/gitea-linux-amd64 # Executable করো chmod +x gitea-linux-amd64 # চালাও ./gitea-linux-amd64 web # Browser-এ: http://localhost:3000 # First time setup wizard চলবে
কখন Gitea বেছে নেবে:

নিজের server-এ সম্পূর্ণ control চাইলে → Offline / air-gapped environment-এ → Company data বাইরে যাবে না এই নিশ্চয়তা দরকার হলে → কম resource-এ Git server চালাতে চাইলে

🔷 কোনটা বেছে নেবে? — সিদ্ধান্ত গাইড

তুমি যদি... তাহলে ব্যবহার করো
নতুন ডেভেলপার বা student GitHub
Open source project করতে চাও GitHub
Portfolio বানাতে চাও GitHub
Complete DevOps pipeline + self-hosting চাও GitLab
Team ইতোমধ্যে Jira ব্যবহার করে Bitbucket
Microsoft / Azure / .NET stack Azure DevOps
নিজের private server চাও Gitea
সব কিছু নিজের control-এ রাখতে চাও Gitea বা GitLab CE
⚠️ মনে রেখো:

সব service-ই Git ব্যবহার করে — তাই Git শিখলে যেকোনো platform-এ কাজ করতে পারবে। Hosting service শুধু Git-এর উপরে extra features যোগ করে। নতুন হলে GitHub দিয়ে শুরু করো।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📋 Complete Command Reference

কাজের সময় চট করে দেখার জন্য সব গুরুত্বপূর্ণ কমান্ড এক জায়গায়।


🔷 Setup ও Config

কমান্ড কাজ
git --version Git version দেখো
git config --global user.name "নাম" Global নাম set
git config --global user.email "email" Global email set
git config --list সব config দেখো
git config --global init.defaultBranch main Default branch main
git config --global core.editor "code --wait" VS Code editor set
git config --global alias.lg "log --oneline --graph --all" Alias তৈরি

🔷 Repository তৈরি

কমান্ড কাজ
git init নতুন repo init
git init my-project ফোল্ডার সহ init
git clone <url> Remote repo clone
git clone --depth=1 <url> Shallow clone
git clone --branch develop <url> নির্দিষ্ট branch

🔷 Stage ও Commit

কমান্ড কাজ
git status বর্তমান অবস্থা
git status -s সংক্ষিপ্ত অবস্থা
git add <file> নির্দিষ্ট ফাইল stage
git add . সব stage করো
git add -p Interactive patch staging
git commit -m "msg" Commit করো
git commit -am "msg" Stage + commit (tracked files)
git commit --amend -m "new msg" শেষ commit-এর message ঠিক করো
git diff Unstaged পরিবর্তন
git diff --staged Staged পরিবর্তন
git diff HEAD সব পরিবর্তন last commit থেকে
git diff main feature দুই branch-এর পার্থক্য

🔷 History

কমান্ড কাজ
git log Commit history
git log --oneline সংক্ষিপ্ত log
git log --oneline --graph --all Branch tree দেখো
git log -5 শেষ ৫টি
git log --author="Farid" নির্দিষ্ট ব্যক্তির
git log --grep="navbar" Message-এ keyword
git log -- file.css ফাইলের history
git show HEAD শেষ commit বিস্তারিত
git show a1b2c3d নির্দিষ্ট commit
git blame file.css কে কোন লাইন লিখেছে
git reflog সব HEAD পরিবর্তন (life-saver!)

🔷 Branch

কমান্ড কাজ
git branch সব local branch
git branch -a সব branch (remote সহ)
git branch -v Branch + শেষ commit
git checkout -b <name> Branch তৈরি + switch
git switch -c <name> একই (modern)
git switch main main-এ ফিরে যাও
git switch - আগের branch-এ যাও
git branch -m new-name Current branch rename
git branch -d <name> Merge হওয়া branch মুছো
git branch -D <name> Force delete
git merge <branch> Merge করো
git merge --no-ff <branch> Merge commit সহ
git merge --abort Merge বাতিল
git rebase main main-এর উপরে rebase
git rebase -i HEAD~3 Interactive rebase

🔷 Undo

কমান্ড কাজ নিরাপদ?
git restore <file> Unstaged পরিবর্তন বাতিল ⚠️ মুছে যায়
git restore --staged <file> Unstage করো
git revert HEAD শেষ commit নিরাপদে বাতিল ✅ সবচেয়ে নিরাপদ
git reset --soft HEAD~1 Commit বাতিল, staged রাখো
git reset HEAD~1 Commit বাতিল, unstaged ⚠️
git reset --hard HEAD~1 Commit + পরিবর্তন মুছো
git cherry-pick <hash> নির্দিষ্ট commit অন্য branch-এ

🔷 Remote

কমান্ড কাজ
git remote -v সব remote দেখো
git remote add origin <url> Remote যোগ করো
git remote set-url origin <url> URL পরিবর্তন করো
git push -u origin main প্রথমবার push + tracking
git push Current branch push
git push --tags সব tag push
git push origin --delete <branch> Remote branch মুছো
git pull Fetch + merge
git pull --rebase Fetch + rebase
git fetch শুধু download, merge নয়
git fetch --prune Deleted remote branch সরাও

🔷 Stash ও Tags

কমান্ড কাজ
git stash কাজ সরিয়ে রাখো
git stash save "message" নাম দিয়ে stash
git stash list সব stash দেখো
git stash pop সর্বশেষ stash ফিরিয়ে আনো + মুছো
git stash apply stash@{1} নির্দিষ্ট stash আনো
git stash clear সব stash মুছো
git tag -a v1.0.0 -m "msg" Annotated tag
git tag সব tag দেখো
git push --tags সব tag push
git tag -d v1.0.0 Local tag মুছো

🔷 Git Patch ও Worktree

কমান্ড কাজ
git format-patch -1 HEAD শেষ commit-এর patch তৈরি
git format-patch -3 HEAD শেষ ৩টি commit-এর patch
git apply <file.patch> Patch apply করো
git apply --check <file.patch> Patch preview (apply ছাড়া)
git am <file.patch> Commit সহ patch apply
git worktree add <path> <branch> নতুন worktree তৈরি
git worktree list সব worktree দেখো
git worktree remove <path> Worktree সরাও
git worktree prune Deleted worktree cleanup

🔷 GitHub CLI (gh)

কমান্ড কাজ
gh auth login GitHub-এ login
gh repo create <name> --public নতুন repo তৈরি
gh repo clone <user/repo> Repo clone
gh repo list তোমার সব repo
gh issue list সব issue দেখো
gh issue create --title "..." --body "..." নতুন issue তৈরি
gh issue close <number> Issue বন্ধ করো
gh pr create --title "..." --body "..." নতুন PR তৈরি
gh pr list সব PR দেখো
gh pr merge <number> --squash PR merge করো
gh run list GitHub Actions run দেখো
gh gist create <file> --public Gist তৈরি
gh gist list সব gist দেখো

🔷 GitHub REST API (curl)

Endpoint কাজ
GET /user/repos নিজের সব repo
GET /repos/:owner/:repo Repo বিস্তারিত
POST /repos/:owner/:repo/issues নতুন issue তৈরি
GET /repos/:owner/:repo/pulls সব PR দেখো
POST /repos/:owner/:repo/releases Release তৈরি
GET /search/repositories?q=:query Repo search

🔷 .gitattributes ও অন্যান্য

Pattern / কমান্ড কাজ
* text=auto Line ending auto-normalize
*.png binary Binary file mark (diff বাদ)
*.sh text eol=lf LF line ending force
tests/ export-ignore Archive থেকে বাদ
git lfs install LFS install
git lfs track "*.psd" LFS-এ ফাইল type যোগ
git lfs ls-files LFS-tracked ফাইল দেখো
git bisect start Bisect শুরু
git bisect bad / good Commit mark করো
git bisect reset Bisect শেষ করো
git submodule add <url> <path> Submodule যোগ
git submodule update --remote Submodule আপডেট

🔷 Repo Hosting Services

Service বিশেষত্ব কখন ব্যবহার করবে
GitHub সবচেয়ে বড় community, Copilot, Actions Open source, portfolio, সব ক্ষেত্রে
GitLab Built-in CI/CD, self-hosting বিনামূল্যে DevOps pipeline, enterprise
Bitbucket Jira ও Confluence integration Atlassian ecosystem
Azure DevOps Azure Pipelines, Boards, Artifacts Microsoft / .NET / Azure stack
Gitea Lightweight, একটি binary-তে চলে Self-hosted, private server

🔷 Hosting CLI Quick Reference

কাজ GitHub (gh) GitLab (glab)
Login gh auth login glab auth login
Repo তৈরি gh repo create glab repo create
Issue তৈরি gh issue create glab issue create
PR / MR তৈরি gh pr create glab mr create
Pipeline দেখো gh run list glab pipeline list
সবচেয়ে বেশি ব্যবহৃত ৫টি কমান্ড — প্রতিদিনের কাজে:
git status ← এখন কোন অবস্থায়? git add . ← এগুলো নেবো git commit -m "..." ← সংরক্ষণ করো git push ← GitHub-এ পাঠাও git pull ← সহকর্মীর কাজ নামাও

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!