gitHub ,gitLab এবং bitBucket
Git কি এবং Git কিভাবে কাজ করে?

Git কি?
Git হল একটি Source Code Version Control এবং Source Code Management System, অর্থাৎ আপনার কম্পিউটারে আগে কি কোড লিখেছেন এবং পরবর্তীতে তা কোথায় কোথায় পরিবর্তন করেছেন তার ভার্সন বা রিভিশন কন্ট্রোল এবং ভার্সন বা রিভিশন অনুযায়ী সংরক্ষণ করার একটি আদর্শ সিস্টেম । ২০০৫ সালে লিনাক্স কার্নেলের জন্য লিনাস টারভাল্ডস গিট ডিজাইন এবং ডেভেলপ করেন। জিএনইউ জেনারেল পাবলিক লাইসেন্স এর অধীন লিনাক্সের মত গিটও ওপেনসোর্স এবং এখন পর্যন্ত সফটওয়্যার ডেভেলপমেন্টের জন্য সবচেয়ে জনপ্রিয় ভার্সন কন্ট্রোল সিস্টেম।
Git কেন ব্যবহার করবেন?
যেহেতু গিট একটি Version Control Software তাই যেকোনো সফটওয়ারের ভার্সন এর (Git) মাধ্যমে সহজেই কন্ট্রোল করা যায়। গিট এর মাধ্যমে বিভিন্ন ডেভেলপার একই সফটওয়ারের ডেভেলপমেন্টে অংশ নিতে পারেন, পরিবর্তন করতে পারেন, এবং একজন নির্দিষ্ট ডেভেলপার সেই পরিবর্তন চূড়ান্ত করতে পারেন। যেহেতু গিট একটি ডিস্ট্রিবিউটেড ভার্সন কন্ট্রোল সিস্টেম, এটি সার্ভার হিসেবেও ব্যবহৃত হতে পারে। একটি ডেডিকেটেড গিট সার্ভার সফটওয়্যার বিভিন্ন ফিচারগুলোর মধ্যে এক্সেস কন্ট্রোল যোগ করা, ওয়েবের মাধ্যমে গিট রিপজিটরির কন্টেন্ট প্রদর্শন করা এবং একের অধিক রিপজিটরি পরিচালনা করতে সাহায্য করে। গিট এর একটি বড় সুবিধা হচ্ছে একটি প্রজেক্ট নিয়ে অসংখ্য ডেভেলপার(developer) একই সময় কাজ করতে পারে। আপনি চাইলে ইন্টারনেট সংযোগ ছাড়াও কাজ করতে পারবেন। প্রাথমিকভাবে যদিও গিট লিনাক্সের জন্য ডেভেলপ করা হয়েছে, তারপরও এটা অন্যান্য অপারেটিং সিস্টেম, যেমন বিএসডি, সোলারিস, ওএস এক্স, এবং মাইক্রোসফটের উইন্ডোজও সাপোর্ট করে।
গিট নিয়ে কাজ শুরুর আগে এর (গিট) বহুল ব্যবহৃত কমান্ডগুলো(command) গুলো সম্পর্কে জানতে হবে-
- git init -একটি নতুন রিপোজিটরি(repository) তৈরি করার জন্য ব্যবহৃত হয়।
- git config – গিট এ Configuration গুলো সেট করার জন্য ব্যবহৃত হয়।
- git status-গিটের বর্তমান status check করা।
- git add – রিপোজিটরি(repository) তে এক বা সবগুলো ফাইল একসাথে যুক্ত করার জন্য ব্যবহৃত হয়।
- git clone – পূর্ব থেকে বিদ্যমান কোন রিপোজিটরির সম্পূর্ণ তথ্য ডাউনলোড করার জন্য ব্যবহৃত হয়।
- git commit – অফলাইন(offline) রিপোজিটরিতে স্থায়ীভাবে কাজ সংযুক্ত করার জন্য ব্যবহৃত হয়।
- git pull – রিমোট(remote) রিপোজিটরি থেকে ফাইল ডাউনলোড করে অফলাইন রিপোজিটরির সাথে merge করার জন্য ব্যবহৃত হয়।
- git log– গিট এর log check করার জন্য ব্যবহৃতহয় হয়।
- git push – অফলাইন রিপোজিটরি থেকে ফাইল রিমোট রিপোজিটরিতে আপলোড করার জন্য ব্যবহৃত হয়।
- git branch– রিপোজিটরি(repository) তে নতুন branch তৈরির জন্য ব্যবহৃত হয়।
- git checkout -master ব্রাঞ্চ থেকে অন্য ব্রাঞ্চে সুইচ করতে ব্যবহার হয়।
- git merge – এক ব্রাঞ্চের সাথে অন্য ব্রাঞ্চকে Merge করতে ব্যবহার হয়।
কম্পিউটারে গিট Installation এবং Configuration:
গিট নিয়ে কাজ শুরু করার জন্য আপনার কম্পিউটারকে গিট ব্যবহার উপযোগী করে নিতে হবে। সেজন্য আপনার কম্পিউটারে গিট ইন্সটল(install) করতে হবে। চলুন দেখে নেয়া যাক, ভিন্ন ভিন্ন OS গুলোতে কিভাবে গিট ইন্সটল এবং কনফিগার(configure) করে নিতে হয়।
Windows:
১. গিট প্যাকেজটি ডাউনলোড করার জন্য এখানে ক্লিক করুন।
২. ডাউনলোড করা ফাইলটি ক্লিক করে ইন্সটল করে নিন।
Mac OS X:
১. Mac OS X এর জন্য গিট প্যাকেজটি ডাউনলোড করার জন্য এখানে ক্লিক করুন।
২. ডাউনলোড করা ফাইলটি ক্লিক করে ইন্সটল করে নিন।
Linux:
Linux এর বিভিন্ন ডিস্ট্রো এর জন্য গিট ইন্সটল পদ্ধতি বিভিন্ন রকম। কিন্তু খুবই সহজ। ডিস্ট্রো অনুযায়ী terminal-এ নিচের কমান্ডগুলো লিখুন।
- Debian/Ubuntu
# apt-get install git
- Fedora
# yum install git
- Gentoo
# emerge --ask --verbose dev-vcs/git
- Arch Linux
# pacman -S git
- FreeBSD
$ cd /usr/ports/devel/git $make install
- Solaris 11 Express
$ pkg install developer/versioning/git
- OpenBSD
$ pkg_add git
গিট Configure
আমি ধরে নিয়েছি উপরের যেকোনো একটা OS এ আপনি গিট ইনস্টল করে ফেলেছেন। এখন আপনাকে গিট কনফিগার করতে হবে। আর এই কনফিগার করার মূল উদ্দেশ্য হচ্ছে, আপনি যখন গিট এর মাধ্যমে কমিট(commit) করবেন তখন কমিটের সাথে সে আপনার তথ্য সংরক্ষণ করে রাখবে। কনফিগারেশনের সময় আপনাকে শুধু আপনার user name এবং email address বলে দিতে হবে। Windows ব্যবহারকারীরা গিট ইন্সটল করার পর কম্পিউটার ডেক্সটপে gitBash নামে একটি শর্টকাট ফাইল তৈরি হবে। সেটি খুলে তাতে নিচের কমান্ডগুলো লিখতে পারেন। অথবা আপনি চাইলে সরাসরি CMD তেও কমান্ডগুলো রান করতে পারেন । Linux এবং Mac OSX ব্যবহারকারীরা terminal-এ কমান্ডগুলো লিখতে পারবেন।
git config --global user.name "Your Name Here"
Your Name Here এর জায়গায় আপনার নাম লিখুন।
git config --global user.email "your_email@youremail.com"
your_email@youremail.com এর জায়গায় আপনার Email Address লিখুন।
এখানে যে email address টি আপনি দিবেন তা অবশ্যই আপনার সার্ভার অ্যাকাউন্টের email address এর সাথে যেন মিল থাকে তা খেয়াল রাখবেন। এখন আপনার কম্পিউটারটি গিট ব্যবহার উপযোগি হয়েছে। এখন থেকে আপনি আপনার কম্পিউটারে গিটের কমান্ডগুলো কাজে লাগাতে পারবেন। আমরা আমাদের সকল কমান্ড gitBash,CMD অথবা terminal-এ লিখবো।
ভিন্ন ভিন্ন প্রজেক্টের জন্য ভিন্ন ভিন্ন গিট Configure
ধরুন আপনি চান একাধিক প্রজেক্টের জন্য একাধিক নাম ও ইমেইল থাকবে। অর্থাৎ আপনি আপনার পিসিতে অফিসের একটা প্রজেক্ট আছে আবার আপনার পারসোনাল একটা প্রজেক্ট আছে। অফিসের প্রজেক্টটি রাখা আছে আপনার অফিসের গিটহাবের অ্যাকাউন্টে। আপনি সেই অ্যাকাউন্টে অ্যাক্সেস করেন আপনার অফিসের ইমেইল দিয়ে। আবার আপনার পারসোনাল গিটহাব অ্যাকাউন্ট খোলা হয়েছিল আপনার পারসোনাল ইমেইল দিয়ে। তাহলে আপনার প্রজেক্টে যদি গ্লোবাল ইউজার নেম আর ইমেইল সেট করা থাকে তখন কিন্তু সব প্রজেক্টেই আপনার একই নাম ও একই ইমেইল দেখাবে। এজন্য এখন আপনি গ্লোবাল ইউজার নেম এবং ইমেইল ব্যবহার করতে পারবেননা। এখন আপনাকে global কীওয়ার্ড ও তার আগের হাইফেন দুটো কেটে দিতে হবে। এবং কমান্ডগুলো হবে নিচের মতো:
//প্রথম প্রজেক্টের জন্য একটি ইমেইল ইউজ করে গিট কনফিগার করা হয়েছে git config user.name "Masud Alam" git config user.email "masud@gmail.com" //দ্বিতীয় প্রজেক্ট কনফিগার করা হয়েছে অন্য আরেকটি ইমেইল দিয়ে git config user.name "Masud Alam" git config user.email "masud.eden@gmail.com"
নতুন গিট রিপোজিটরি সেটাপঃ
মূলতঃ ডিরেক্টরিকেই গিটে রিপোজিটরি (Repository) বা সংক্ষেপে অনেকে ‘রিপো (Repo)’ বলে। এখন যদি আপনি আপনার যেকোনো প্রোজেক্টে গিট স্টার্ট করতে চান, তাহলে প্রথমে আপনার গিট ব্যাশ বা আপনার CMD কমান্ড লাইন থেকেই সে প্রোজেক্টের ডিরেক্টরিতে যেতে হবে। অথবা আপনার প্রোজেক্টের ভিতরে রাইট ক্লিক করলে দেখবেন Git Bash Here নামে একটা অপশন আসবে। এটা দিয়ে আপনি আপনার কাঙ্ক্ষিত প্রোজেক্ট ডিরেক্টরির ভিতর থেকে ক্লিক করেই এই ডিরেক্টরির পাথ সহ গিট ব্যাশ ওপেন হবে এবং আপনি ডিরেক্টরির জন্য এখন যেকোনো গিট কমান্ড লিখতে পারবেন।
এখন ধরুন আপনার C:\xampp\htdocs এ git-learn নামে একটা ডিরেক্টরি আছে। এবং ভিতরে ভিতরে কিছু ফাইল আছে। এখন এখানে যদি আপনি গিট স্টার্ট করতে চান। তাহলে আপনাকে নিচের কমান্ডটি লিখতে হবে।
git init
এখন আপনাকে ঠিক নিচের মতো একটা রেজাল্ট দেখাবে :

এখন যেহেতু আমরা git-learn ডিরেক্টরির ভিতরের সবকিছুই ট্র্যাক করতে চাইl আর তাই আমি git-learn ডিরেক্টরির ভিতর থেকে git init কমান্ডটি রান করলাম । আর তাতে এই ডিরেক্টরির ভিতরে গিটের রিপো সেটাপ হয়ে গেলো। এখন গিট আপনার রিপো বা ডিরেক্টরির এর সব ট্র্যাক করা শুরু করতে পারবে, এই ডিরেক্টরির ভিতরে যতো ফাইল অথবা ফোল্ডার আছে সব। তবে ট্র্যাক করলেও গিট সেগুলোকে ভার্শন হিসাবে স্টোর করবে না। তারজন্যে আপনাকেই স্পেসেফিকলি বলে দিতে হবে কোনটা ঠিক কখন কিভাবে সেইভ করবে।
Repository এর নির্দিষ্ট একটা File অথবা সব file কে গিট ভার্শন হিসাবে সংরক্ষণ :
Repository এর নির্দিষ্ট একটা File অথবা সব file কে গিট ভার্শন হিসাবে সংরক্ষণ করার আগে আপনাকে প্রথমে বুজতে হবে git কিভাবে কাজ করে?
গিট এ কাজ করার সময় আমরা যখন লোকাল(local) রিপোজিটরিতে কোন পরিবর্তন করি তখন আমরা working directory-তে থাকি। আর তখন git add কমান্ড দেয়ার পর সেটা staging area তে চলে যায় এবং git commit কমান্ড দেয়ার পর সেটা স্থায়িভাবে লোকাল রিপোজিটরিতে যুক্ত হয়। পরবর্তিতে চাইলে সেটা রিমোট (GitHub, gitLab, bitbucket) রিপোজিটরিতে git push কমান্ড দিয়ে আপলোড করে দেয়া যায়। নিচের ছবিটি লক্ষ্য করুন :

গিটের বর্তমান status check করাঃ
আমরা এখন আমাদের গিটের বর্তমান স্ট্যাটাস দেখতে চাচ্ছি, অর্থাৎ কোন কোন ফাইল ট্র্যাক করা হয় নি বা কোন ফাইল স্টেজিং এ আছে। সেজন্যে আমরা নিচের এই কমান্ডটি ব্যবহার করব:
git status
এখন আপনাকে ঠিক নিচের মতো একটা রেজাল্ট দেখাবে :

লক্ষ্য করে দেখবেন আমার এই ডিরেক্টরিতে দুইটা ফাইল আছে test.php এবং index.php নামে। আমি যেহেতু মাত্রই গিট ইনিশিয়েট করলাম এই প্রোজেক্টে তাই দুইটা ফাইলই এখানে আন-ট্র্যাকড দেখাচ্ছে। আর সাথে কিছু হিন্টও দিয়ে দিচ্ছে কিভাবে ফাইলগুলো ট্র্যাক করতে হবে।
File Staging এরিয়াতে নেওয়াঃ
ধরুন আমরা প্রথমে আমাদের test.php ফাইলটা কে ট্র্যাক করতে চাই অর্থাৎ test.php file টিকে Staging এরিয়াতে নিতে চাই। সেজন্যে আমাদেরকে নিচের কমান্ডটি দিতে হবেঃ
git add test.php
এখন যদি আমরা আবার git status দেই, তাহলে নিচের মতো বর্তমান স্ট্যাটাস দেখবেন:

লখ্য করে দেখেন উপরের ছবিটিতে দুইটা সেকশন দেখাচ্ছে। যেটা ট্র্যাক করেছি অর্থাৎ test.php সেটা দেখাচ্ছে Changes to be committed সেকশন এ। আর নিচে আগের সেই আন-ট্র্যাকড ফাইলটাই দেখাচ্ছে। যাই হোক এই মুহূর্তে আমাদের test.php file টি staging এরিয়াতে আছে, তাই এখন কমিট করলে গিট শুধুমাত্র এই ফাইলটাকেই version হিস্টোরীতে রাখবে। আর index.php file যেটা এখনো ট্র্যাক করা হয় নাই সেটাকে নিয়ে কিছু করবে না। এখন যদি আমরা চাই যে এই ডিরেক্টরির ভিতরের সব আন-ট্র্যাকড ফাইলকে ট্র্যাক করতে একটা কমান্ড দিয়ে তাহলে git এর কমান্ডটি হবে নিচের মতো :
git add --all
অথবা
git add .
এখন যদি আপনি git status কমান্ডটি দেন , তাহলে দেখবেন সব ট্র্যাক হয়ে গেছে, মানে সবগুলো স্টেজিং এরিয়াতে আছে। কোনো ফাইল আন-ট্র্যাকড নাই। আগের test.php এখনো স্টেজিং এ আছে, যেহেতু এটা আমরা এখনো কমিট করি নাই। সাথে এখন index.php file ও staging area তে চলে আসছে। এখন কমিট করলে দুইটা মিলেই পুরোটার একটা ভার্শন রাখবে গিট। নিচের ছবিটি লক্ষ্য করুন:

commit:
commit মানে হচ্ছে final. অর্থাৎ আপনি ফাইনাল সিদ্ধান্ত নিবেন আপনার ট্র্যাক করা চেঞ্জেসগুলোকে গিট রিপোতে রাখবেন কিনা? যদি গিট রিপোতে রাখবেন মনে ,করেন, তাহলে আপনাকে কমিট করতে হবে। আর কমিট করতে চাইলে, প্রত্যেক কমিটের সাথে একটা ম্যাসেজও দিতে হয় যাতে পরবর্তিতে যেকোনো সময় আপনার বুঝতে সুবিধা হয় কোন কমিটটা ঠিক কি কারণে করা হয়েছিলো। সবকিছু এক লাইনে এভাবে হবেঃ
git commit -m "New Message Added"
এখানে New Message Added হচ্ছে আমাদের এই কমিটের ম্যাসেজ। কমান্ড দেওয়া হলে এরকম ম্যাসেজ দেখতে পাবেনঃ

নোট: যেকোনো file বা ডিরেক্টরিকে আপনি স্টেজিং এরিয়ারে নেওয়ার আগে কমিট করতে পারবেন না।
ফাইল মডিফাই করে আবার কমিট করাঃ
এখনতো আমাদের একটা ভার্শন তৈরী হয়ে গেলো। কিন্তু আমরা প্রোজেক্টে আরো অনেক কাজ আছে। এখন আমি test.php ফাইলে নতুন কিছু variable যুক্ত করব । নতুন ভ্যারিয়েবল এবং তার ভ্যালু গুলো সহ বর্তমানে ফাইলটা ঠিক এরকম অবস্থায় আছেঃ
<?php $students=["Minhaz","Azharul","Shakil"]; echo "Hello This is my First Git Learn"; ?>
এখন যদি আপনি test.php file টি সেইভ দিয়ে git status চেক করেন, তাহলে দেখবেন ফাইল এটা মডিফাইড এবং আন-ট্র্যাকড অবস্থায় দেখাচ্ছেঃ

এখন এই আন-ট্র্যাকড ফাইলটাকে স্টেজিং এ নিয়ে ফাইনাল কমিট করে দিতে চাচ্ছি
git add --all
এবং ফাইনাল কমিটের জন্যঃ
git commit -m "New Variable $students Added"

পুরাতন ভার্সন এ ফিরে যাওয়া :
আমরা যখন ডেভেলপমেন্ট এ থাকি , তখন অনেক সময় দেখা যায় আমাদেরকে পূর্বের ভার্শনে ফিরে যেতে হয়। একটা একটা করে ফিচার ডেভেলপড করার পর একটা সময় এসে কোনো প্রব্লেম দেখা দেয় যেটা পূর্বের কোনো ভার্শনে ঠিকঠাক কাজ করতো কিন্তু এখন সেটা কাজ করছে না। সেক্ষেত্রে গিট এ ট্র্যাক করা থাকলে আপনি সহজেই আপনার সেই ভার্শনে ফিরে যেতে পারবেন আর কোড চেক করতে পারবেন, চাইলে আপনার প্রোজেক্ট রানও করতে পারবেন। ঠিক ঐসময় আপনার প্রোজেক্ট যেরকম ছিলো সেরকমটাই দেখবেন।
আমরা এখন ইচ্ছাকৃতভাবেই test.php file এর ভিতরে $newStudents নামে একটা নতুন variable তৈরী করব এবং আরেকটা কমিট করবো । নতুন ভ্যারিয়েবল যুক্ত করার পর ফাইলটা এরকম হবেঃ
<?php $students=["Minhaz","Azharul","Shakil"]; $newStudents=["Fuad","Rezaul","Rakib"] echo "Hello This is my First Git Learn"; ?>
এখন এটাকে সেইভ করে স্টেজিং এ অ্যাড করে কমিট করে দিবোঃ
git add test.php
git commit -m "Another New Variable $newStudents Added"

এখন আমরা ইচ্ছা করে $students variable টি ফেলে দিয়ে একটা commit করে ফেলব।

এখন কোনো কারণে আপনার আগের ভার্শনে ফিরে যাওয়া দরকার , অর্থাৎ $stu1dents ভ্যারিয়েবল টি ফিরে ফিতে চান। আর এর জন্য আমাদের কে প্রথমে log check করতে হবে। চলুন প্রথমে লগ চেক করে দেখি :
git log
এখন আপনি নিচের মতো লগ গুলো দেখতে পারবেন :

উপরের ছবিটিতে লক্ষ্য করে থাকবেন এখানে মোট চারটি কমিট আছে। সাথে ডিটেইলস সহ, কমিটের ম্যাসেজ দেখে খুব সহজেই আপনি বুঝতে পারবেন কোন কমিটে কি করা হয়েছিলো। আর সাথে কিছু এনক্রিপ্টেড ইউনিক কমিট আই ডি আছে। আপনি চাইলে এগুলো ইউজ করে আবার পূর্বের ভার্শনগুলোয় ফিরে যেতে পারবেন।
তবে এখানে একটু কমপ্লেক্সিটি আছে, আর তা হচ্ছে প্রতিটি কমিট এর Unique Id টি অনেক বেশি লেংথ এর। এখন যদি এই ID গুলোকে আরো সহজ এবং ছোট করে দেখতে চাই তাহলে নিচের কমান্ডটি লিখতে হবে।
git log --oneline

এখানে সুন্দর করে ছোটো করে প্রয়োজনীয় সব দেখাচ্ছে। এখন এইখানের শর্টকাট ইউনিক কমিট আইডিগুলোও শর্ট করে দেওয়া হয়েছে। এখন আমরা এই শর্ট ভার্শনগুলো ব্যবহার করে আগের কাঙ্ক্ষিত ভার্শনে ফিরে যেতে পারব।
ধরুন আমরা ff15a04 এই কমিট টাতে ফিরে যেতে চাই।

ফিরে যাওয়ার জন্য এখন আপনার কমান্ডটি হবে এই রকম :
git checkout ff15a04
এখানে শেষেরটা হচ্ছে কমিট আইডি। মনে রাখবেন এখানে আপনার আইডি কিন্তু ভিন্ন হবে। এখন এই কমান্ড রান করলে আপনার প্রোজেক্ট master ব্রাঞ্চ থেকে আগের এই কমিটের ভার্শনে ফিরে যাবে। তবে অবশ্যই মাস্টার ব্রাঞ্চে থাকাকালে সবকিছু আপনার ট্র্যাক করা থাকতে হবে। কোনো ফাইল/ফোল্ডার আন-ট্র্যাকড থাকলে বা আন-কমিটেড থাকলে আপনি চেক-আউট করতে পারবেন না। এখন কমান্ড লাইনে master এর জায়গায় কমিট আইডিটা দেখবেন। সাথে দেখবেন লেখা HEAD detached at আপনার কমিট আইডি।

এখন আপনার test.php ফাইল চেক করে দেখুন আগের সেই ভার্শনে ফিরে আসছে।
<?php $students=["Minhaz","Azharul","Shakil"]; $newStudents=["Fuad","Rezaul","Rakib"] echo "Hello This is my First Git Learn"; ?>
যেহেতু আপনি এখন আপনার বর্তমান ওয়ার্কিং ডিরেক্টরিতে আগের একটা ভার্শনে রয়েছেন। কিন্তু আপনি মাস্টার ব্রাঞ্চে ফিরে যেতে চান, তাহলে আবার চেক-আউট দিতে হবে এভাবেঃ
git checkout master
গিট এ Branching এবং Merging কি?
গিট এ Branching এবং Merging কি তা বুজতে হলে আপনাকে বাস্তব একটা কাজের অভিজ্ঞতা বলি: আমরা যখন কোনো সাধারণ একটা ওয়েব সাইট তৈরি করতে যাই। অনেক সময় দেখা যায় একটি ওয়েব সাইট এ কয়েকজন ডেভেলপার এক সাথে একটা team হিসেবে কাজ করতে হয়। টিমের মধ্যে কেও হয়তো কাজ করে Home পেইজ নিয়ে। আবার আরেকজন হয়তো কাজ করে about পেইজ নিয়ে। দেখা যায় টিমের এক এক জন ডেভেলপার এক এক ফিচারে কাজ করে। আর এ থেকেই এসেছে Branch এর ধারণা। অর্থাৎ, এক এক জন এক এক ব্রাঞ্চে কাজ করে। আবার যখন এক একটা ফিচার এর কাজ কমপ্লিট হয়ে যায়, তখন সব কিছু আবার তা মূল প্রজেক্টের সাথ যুক্ত করতে হয়। আর একে বলা হয় Merge। যখন দুইজন ডেভেলপার দুইটা ব্রাঞ্চে থাকে তখন কেউ কারো কোড দেখতে পায়না। এবং কাজ শেষ করে দুইটা ব্রাঞ্চ কে মার্জ করে একটা ব্রাঞ্চে নিয়ে আসা যায়।
নতুন ব্রাঞ্চ তৈরি :
আমরা এখন নতুন একটা ব্রাঞ্চ তৈরী করবো showTable নাম দিয়ে, এর জন্য আপনাকে নিচের কমান্ডটি লিখতে হবে :
git branch showTable
এখন আপনার showTable নামে একটা ব্রাঞ্চ তৈরী হয়ে যাবে। আপনি যে ব্রাঞ্চ থেকে এই নতুন ব্রাঞ্চ তৈরী করেছেন, নতুন ব্রাঞ্চে সেই ভার্শনটাই থাকবে। যেহেতু আমরা এখানে master ব্রাঞ্চ থেকে showTable ব্রাঞ্চ তৈরী করেছি। আর তাই showTable এ আমাদের বর্তমানে master ব্রাঞ্চ এ থাকা প্রোজেক্টের ভার্শনটাই যাবে। মানে এখন master আর showTable এর প্রোজেক্ট একই।
নিচের কমান্ড দিয়ে আপনি চাইলে আপনার প্রোজেক্টে থাকা সবগুলা ব্রাঞ্চ এর লিস্ট ও দেখতে পারবেনঃ
git branch

branch checkout করাঃ
ব্রাঞ্চতো তৈরী হয়েগেলো, এখন আমরা আমাদের তৈরি ব্রাঞ্চ এর checkout করব। সাধারণতঃ আপনি কোন ব্রাঞ্চ এ আছেন তা আপনার কমান্ড লাইনে কারেন্ট ওয়ার্কিং ডিরেক্টরির পাশে দেখলেই বুঝবেন। যেহেতু আমরা আমাদের প্রোজেক্টে এখনো master ব্রাঞ্চেই আছি। আর branch চেক-আউট করা অনেকটা কমিটে চেক-আউট করার মতোই। পার্থক্য হচ্ছে আগে কমিট চেকআউট করার সময় কমিট আই ডি লাগতো , এখন আমরা ব্রাঞ্চ এর নাম দিয়েই চেক-আউট করতে পারবো। ব্রাঞ্চ চেকআউট করার জন্য আপনাকে নিচের কমান্ডটি ব্যবহার করতে হবে।
git checkout showTable
এখন আপনার কমান্ডলাইনে নিচের মতো রেজাল্ট দেখাবে :

তবে আপনি যদি চান নতুন ব্রাঞ্চ তৈরী করে সাথে সাথে সেই ব্রাঞ্চে চেক-আউট হয়ে যাবে, তাহলে আপনাকে নিচের কমান্ডটি লিখতে হবে :
git checkout -b showTableNew

লক্ষ্য করুন আমরা নতুন একটা ব্রাঞ্চ showTableNew নামে নতুন একটা ব্রাঞ্চ তৈরী করেছি এবং সাথে সাথে সেই ব্রাঞ্চে চেক-আউট করে ফেলেছি।
এখন আমরা showTable এ কিছু মডিফাই করে তারপর সেটিকে মাস্টারে মার্জ করবো। আর এর জন্য আপনাকে checkout showTable দিয়ে আমরা আমাদের showTable ব্রাঞ্চে চলে যেতে হবে। তার আগে খেয়াল রাখতে হবে আপনি কোন ব্রাঞ্চে আছেন। এর জন্য আপনি কারেন্ট ওয়ার্কিং ডিরেক্টরির ডান পাশে দেখলেই পাবেন কোন ব্রাঞ্চে আছেন।
ব্রাঞ্চে মডিফিকেশনঃ
এখন আমরা আমাদের showTable ব্রাঞ্চে কিছু মডিফিকেশন করবো। বর্তমানে আমাদের প্রোজেক্টের test.php ফাইল এই অবস্থায় আছেঃ
<?php $newStudents=["Minhaz","Azharul","Shakil"]; echo "Hello This is my First Git Learn"; ?>
এখন আমরা $newStudents variable কে নিচের মতো একটা টেবিল আকারে প্রদর্শন করব।
<?php $newStudents=["Minhaz","Azharul","Shakil"]; echo "Hello This is my First Git Learn"; ?> <table border="1" width="200" cellpadding="5" cellspacing="0"> <tr> <th>Students Name</th> </tr> <?php foreach($newStudents as $student){ echo "<tr><td><center>$student</center></td></tr>"; } ?> </table>
আর উপরের কোডের রেজাল্ট হবে ঠিক নিচের মতো :

এখন আমি আমার এই মডিফাইড ব্রাঞ্চ টি মাস্টার ব্রাঞ্চে বা মেইন প্রোজেক্টে নিয়ে যেতে চাই। কিন্তু তার আগে আপনার এই পরিবর্তনগুলো বর্তমান ব্রাঞ্চে অর্থাৎ showTable ব্রাঞ্চে কমিট করতে হবে। কারণ আপনি যতক্ষণ পর্যন্ত কোনো কিছু কমিট না করবেন, গিট সেগুলাকে কাউন্টই করবে না। তাহলে চলুন কমিট করে ফেলি :
git add --all git commit -m "Tabulized Version Added"

Commit এর কাজ শেষ। এখন আমি এই showTable ব্রাঞ্চে থাকা কাজগুলো মেইন master ব্রাঞ্চে নিয়ে যাবো। সেজন্যে আপনাকে প্রথমে master ব্রাঞ্চে চেক-আউট করতে হবেঃ
git checkout master

এখন মাস্টারে চেক-আউট করার পরে দেখবেন মাস্টার আগের ভার্শনেই আছে। এখন আমরা showTable এ করা মডিফিকেশনগুলো master branch এর সাথে merge করব। আর এর জন্য আপনাকে মাস্টার ব্রাঞ্চে থাকা অবস্থায় এই কমান্ড দিলেই অটোম্যাটিক মার্জ হয়ে যাবেঃ
git merge showTable

একাধিক কমিটের মধ্যে পার্থক্য দেখাঃ
গিট এ আপনি চাইলে আপনার এক কমিটের সাথে অন্য যে কোনো কমিটের পার্থক্য দেখতে পারেন, অর্থাৎ আপনার আগের কমিটের কী কী কোড পরিবর্তন হয়েছে, কোথায় কোড অ্যাড করা হয়েছে, কোথায় ডিলেট করা হয়েছে, এগুলোও সব দেখতে পারবো নিচের গিটের কমান্ডের সাহায্যেঃ
git commit compareFromId compareAgainstID
নিচের রেজাল্ট টি দেখুন :
