৩ দিনে git এবং Github basic আজকে ৩য় পর্ব

day 3

Git merge, git push: git fetch: git pull:

Git Merge কী?

git merge কমান্ডটি দুটি ভিন্ন ব্রাঞ্চের কাজ একত্রিত (মার্জ) করতে ব্যবহৃত হয়। ধরুন আপনি একটি নতুন ফিচারের কাজ সম্পন্ন করেছেন যা আলাদা একটি ব্রাঞ্চে করেছেন এবং এখন মূল ব্রাঞ্চে (যেমন main) সেই পরিবর্তনগুলো নিয়ে আসতে চান। এক্ষেত্রে, git merge কমান্ড ব্যবহার করে নতুন ব্রাঞ্চের পরিবর্তনগুলো মূল ব্রাঞ্চের সাথে একত্রিত করা হয়।

Git Merge এর স্টেপ-বাই-স্টেপ প্রক্রিয়া:


1. প্রাথমিক অবস্থা:

ধরুন, আপনার দুটি ব্রাঞ্চ আছে:

  • main (মূল কোড যেখানে রাখা হয়)
  • feature-login (যেখানে আপনি নতুন একটি ফিচার যুক্ত করেছেন)

এখন আপনি feature-login ব্রাঞ্চের পরিবর্তনগুলো main ব্রাঞ্চে নিয়ে আসতে চান।


2. প্রয়োজনীয় কমান্ডগুলো:

  1. প্রথমে মূল ব্রাঞ্চে ফিরে আসুন:

    • মার্জ করার আগে নিশ্চিত হন যে, আপনি সেই ব্রাঞ্চে আছেন যেখানে পরিবর্তনগুলো আনতে চান (যেমন main)।

    কমান্ড:

    git checkout main
    
  2. তারপর মার্জ করুন:

    • এখন feature-login ব্রাঞ্চের পরিবর্তনগুলো main ব্রাঞ্চে মার্জ করুন।

    কমান্ড:

    git merge feature-login
    

    এই কমান্ডটি main ব্রাঞ্চে feature-login ব্রাঞ্চের পরিবর্তনগুলো একত্রিত করবে।


3. মার্জের পরে অবস্থা চেক করুন:

  • মার্জ সফল হলে, আপনি git status কমান্ড চালিয়ে বর্তমান অবস্থা চেক করতে পারেন।

কমান্ড:

git status

Merge এর দুটি ধরণ:

1. Fast-Forward Merge:

  • যদি main ব্রাঞ্চে কোনো নতুন পরিবর্তন না থাকে এবং আপনার কাজ শুধুমাত্র feature-login ব্রাঞ্চে হয়, তাহলে git merge সরাসরি main ব্রাঞ্চকে feature-login এর অবস্থানে নিয়ে যাবে, যাকে fast-forward merge বলা হয়।

উদাহরণ:

git merge feature-login

2. Three-Way Merge:

  • যদি main এবং feature-login উভয় ব্রাঞ্চেই নতুন পরিবর্তন করা হয়, তাহলে git merge একটি three-way merge তৈরি করবে। এতে কিছু কনফ্লিক্ট (বিরোধ) হতে পারে, যেগুলো আপনাকে ম্যানুয়ালি সমাধান করতে হবে।

কনফ্লিক্ট ম্যানেজ করা (যদি বিরোধ ঘটে):

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

1. বিরোধ দেখা যাবে:

Auto-merging file.txt
CONFLICT (content): Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.

2. বিরোধ ঠিক করা:

  • বিরোধের ফাইলগুলো খুলুন এবং ম্যানুয়ালি ঠিক করুন। বিরোধিত অংশগুলো সাধারণত নিচের মত চিহ্নিত করা থাকে:
<<<<<<< HEAD
এই অংশটি main ব্রাঞ্চের।
=======
এই অংশটি feature-login ব্রাঞ্চের।
>>>>>>> feature-login
  • বিরোধ ঠিক করার পর ফাইলগুলো সেভ করুন।

3. কনফ্লিক্ট সমাধান করে কমিট করা:

git add file.txt
git commit -m "Resolved merge conflict in file.txt"

সম্পূর্ণ উদাহরণ:

  1. প্রথমে মূল ব্রাঞ্চে যান:

    git checkout main
    
  2. মার্জ করুন:

    git merge feature-login
    
  3. যদি কোনো কনফ্লিক্ট থাকে, তাহলে ঠিক করে ফাইল যোগ করুন:

    git add file.txt
    git commit -m "Resolved conflict"
    

সংক্ষেপে:

  • git merge <branch-name> : একটি ব্রাঞ্চের পরিবর্তন অন্য ব্রাঞ্চে মার্জ করে।
  • Fast-forward merge : যদি একটি ব্রাঞ্চে কোনো নতুন পরিবর্তন না থাকে, সরাসরি মার্জ হয়।
  • Three-way merge : দুটি ব্রাঞ্চে নতুন পরিবর্তন থাকলে, ম্যানুয়ালি কনফ্লিক্ট সমাধান করতে হয়।

……………………

Git Push, Pull, Fetch কী?

Git-এ push, pull, এবং fetch হল তিনটি গুরুত্বপূর্ণ কমান্ড, যেগুলো ব্যবহার করে লোকাল রিপোজিটরি ও রিমোট (যেমন GitHub, GitLab) রিপোজিটরির মধ্যে ডেটা আদানপ্রদান করা হয়। এগুলো দিয়ে আপনি আপনার কাজের প্রগ্রেস অন্যের সাথে শেয়ার করতে বা অন্যের কাজ আপনার লোকাল মেশিনে আনতে পারেন।

1. Git Push

git push কমান্ডটি লোকাল রিপোজিটরিতে করা আপনার কাজগুলো (যেমন নতুন কমিট) রিমোট রিপোজিটরিতে পাঠায়।

কখন ব্যবহার করবেন:

  • আপনি যদি আপনার লোকাল পরিবর্তনগুলো GitHub বা অন্য কোনো রিমোট রিপোজিটরিতে আপলোড করতে চান, তাহলে git push ব্যবহার করবেন।

ধাপগুলো:

  1. ফাইল স্টেজিং ও কমিট করা:

    git add .
    git commit -m "Your commit message"
    
  2. রিমোট রিপোজিটরিতে পরিবর্তনগুলো পাঠানো (Push):

    git push origin main
    

    এখানে origin হল রিমোট রিপোজিটরির নাম এবং main হল ব্রাঞ্চের নাম যেখানে আপনি পুশ করছেন।


2. Git Fetch

git fetch কমান্ডটি রিমোট রিপোজিটরি থেকে নতুন পরিবর্তনগুলো আপনার লোকাল রিপোজিটরিতে নিয়ে আসে, তবে তা স্বয়ংক্রিয়ভাবে আপনার লোকাল কোডের সাথে মিশিয়ে দেয় না।

কখন ব্যবহার করবেন:

  • যদি আপনি রিমোট রিপোজিটরি থেকে নতুন আপডেটগুলো দেখতে চান কিন্তু নিজের লোকাল ব্রাঞ্চের সাথে একত্র করতে না চান, তখন git fetch ব্যবহার করবেন।

ধাপগুলো:

  1. রিমোট থেকে আপডেট আনা (Fetch):

    git fetch origin
    

    এটি রিমোট রিপোজিটরির নতুন পরিবর্তনগুলো লোকাল রিপোজিটরিতে নিয়ে আসবে, কিন্তু আপনার বর্তমান ব্রাঞ্চে কোনো পরিবর্তন করবে না।


3. Git Pull

git pull কমান্ডটি git fetch এবং git merge কমান্ডের সমন্বয়। এটি রিমোট রিপোজিটরি থেকে নতুন পরিবর্তনগুলো লোকাল রিপোজিটরিতে এনে স্বয়ংক্রিয়ভাবে আপনার কাজের সাথে মিশিয়ে দেয়।

কখন ব্যবহার করবেন:

  • আপনি যদি অন্য কারো কাজ বা রিমোট রিপোজিটরির নতুন পরিবর্তনগুলো লোকাল মেশিনে আনতে এবং সেগুলো আপনার বর্তমান ব্রাঞ্চে একত্র করতে চান, তখন git pull ব্যবহার করবেন।

ধাপগুলো:

  1. রিমোট থেকে আপডেট আনা এবং মার্জ করা (Pull):

    git pull origin main
    

    এখানে origin রিমোট রিপোজিটরি এবং main ব্রাঞ্চের পরিবর্তনগুলো আপনার লোকাল মেশিনে এনে স্বয়ংক্রিয়ভাবে মার্জ করবে।


প্রাথমিক পার্থক্য:

  • git push: আপনার লোকাল পরিবর্তনগুলো রিমোট রিপোজিটরিতে আপলোড করে।
  • git fetch: রিমোট থেকে নতুন আপডেটগুলো লোকাল রিপোজিটরিতে আনে, কিন্তু তা লোকাল কোডে মিশিয়ে দেয় না।
  • git pull: রিমোট থেকে নতুন আপডেটগুলো লোকাল রিপোজিটরিতে এনে তা স্বয়ংক্রিয়ভাবে আপনার লোকাল কোডের সাথে মিশিয়ে দেয়।

সম্পূর্ণ উদাহরণ:

  1. নতুন পরিবর্তন লোকাল রিপোজিটরিতে যোগ ও কমিট করা:

    git add .
    git commit -m "Added new feature"
    
  2. রিমোট রিপোজিটরিতে পুশ করা:

    git push origin main
    
  3. রিমোট রিপোজিটরির নতুন আপডেটগুলো লোকাল মেশিনে আনতে (Pull):

    git pull origin main
    

সারাংশ:

  • git push: লোকাল রিপোজিটরি থেকে রিমোট রিপোজিটরিতে পরিবর্তন পাঠায়।
  • git fetch: রিমোট রিপোজিটরি থেকে পরিবর্তন নিয়ে আসে, কিন্তু আপনার লোকাল কোডে তা প্রয়োগ করে না।
  • git pull: রিমোট রিপোজিটরি থেকে পরিবর্তন নিয়ে আসে এবং তা লোকাল কোডের সাথে একত্রিত করে।

পর্ব - ১: ৩ দিনে git এবং Github basic ১ম পর্ব

পর্ব - ২: ৩ দিনে git এবং Github basic ২য় পর্ব

3 Likes