# ১.১ গিট কি ও কেন ব্যবহার করি?

## গিট কী?

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

## ভার্সন কন্ট্রোল মানে কী?

ধরেন, আপনি একটা প্রজেক্টে কাজ করছেন। প্রথমে ফাইলটা ছিল এরকম:

```diff
index.html
```

কিছুক্ষণ পর আপনি এটিতে নতুন কিছু যুক্ত করলেন:

```xml
<h1>Hello, world!</h1>
```

তারপর আবার বদলে লিখলেন:

```xml
<h1>Hello, Git!</h1>
```

এখন আপনি যদি পুরোনো কোডে ফিরে যেতে চান, তখন গিট ছাড়া সেটা সম্ভব নয় যদি না আপনি নিজে আলাদা করে ফাইলের কপি রেখে থাকেন (যেমন: `index_v1.html`, `index_final.html`) — যা ঝামেলাপূর্ণ।

**গিট এই কাজটাই করে স্বয়ংক্রিয়ভাবে।** আপনি শুধু `git commit` দিয়ে প্রতিটি পরিবর্তন “সেভ” করেন, আর গিট তা একটা টাইমলাইন হিসাবে সংরক্ষণ করে।

## গিট কীভাবে সাহায্য করে?

১. **হিস্ট্রি সংরক্ষণ:** কে, কখন, কী পরিবর্তন করেছে — সব সংরক্ষিত থাকে।

২. **ব্যাকআপ:** গিট হাব (GitHub), গিটল্যাব (GitLab) এর মতো প্ল্যাটফর্মে আপলোড করলে কোড নষ্ট হলেও আপনি ক্লাউড থেকে ফেরত আনতে পারবেন।

৩. **টিমওয়ার্ক:** একসাথে অনেক মানুষ একই প্রজেক্টে কাজ করতে পারে, গিট সবার কোড ম্যানেজ করে।

৪. **ফিচার ব্রাঞ্চ:** নতুন ফিচার বা এক্সপেরিমেন্ট করার জন্য আলাদা ব্রাঞ্চ বানিয়ে মূল কোড নষ্ট না করেই কাজ করা যায়। *(বিস্তারিত সামনে আসবে)*

## উদাহরণ

ধরেন আপনি একটা ওয়েবসাইট বানাচ্ছেন। প্রথমে ফাইল তৈরি করলেন:

```bash
$ mkdir my-website
$ cd my-website
$ echo "<h1>Welcome</h1>" > index.html
```

এখন এই প্রজেক্টে/ফোল্ডারে গিট চালু করেন:

```bash
$ git init
Initialized empty Git repository in my-website/.git/
```

তারপর ফাইলটা গিটকে জানান ও সেভ করুন:

```bash
$ git add index.html
$ git commit -m "Initial commit with welcome page"
```

এখন আপনি চাইলে, যখনই কোনো পরিবর্তন করেন, তা গিটকে দিয়ে সেভ করতে পারবেন।  
ধরেন এইচটিএমএল বদলে দিলেন:

```xml
<h1>My Awesome Website</h1>
```

সেটা আবার সেভ করুন:

```bash
$ git add index.html
$ git commit -m "Updated title to awesome"
```

এইভাবে প্রতিটি পরিবর্তন একটা করে স্টেপ হয়ে থাকবে, যেটাতে আপনি পরে ফিরে যেতে পারবেন।

## উপসংহার

গিট আপনার কোডের একটা টাইম মেশিন।  
আপনি যা-ই করেন, গিট সেটা মনে রাখে, গুছিয়ে রাখে, আর দরকার হলে ফিরিয়ে দেয়। তাই একা বা টিমে কাজ করার সময় গিট শেখা আজকাল আবশ্যক।

<div data-node-type="callout">
<div data-node-type="callout-emoji">✍</div>
<div data-node-type="callout-text"><a target="_self" rel="noopener noreferrer nofollow" href="https://thelastorbit.hashnode.dev/git-tutorial-bangla" style="pointer-events: none">Table of Contents - টেবিল অফ কন্টেন্টস</a></div>
</div>
