আমি এটা বুঝতে পারি না। আমি ওয়েবে এবং বইগুলিতে প্রচুর পড়ছি এবং এমন কিছু যা কেবল আমার মাথায় থাকে না। কেউ দয়া করে আমাকে নিম্নলিখিতগুলির ডামি সংস্করণটি দিতে পারেন:
- গিট আনতে বনাম টান
- গিট মার্জ বনাম রিবাজে
আমি এটা বুঝতে পারি না। আমি ওয়েবে এবং বইগুলিতে প্রচুর পড়ছি এবং এমন কিছু যা কেবল আমার মাথায় থাকে না। কেউ দয়া করে আমাকে নিম্নলিখিতগুলির ডামি সংস্করণটি দিতে পারেন:
উত্তর:
fetch আপনার সংগ্রহস্থল ডেটা আপডেট করে দূরবর্তী * শাখা থেকে যে কোনও পরিবর্তন ডাউনলোড করবে, কিন্তু আপনার স্থানীয় * শাখাটি অপরিবর্তিত রেখে দেবে।
pullআপনার স্থানীয় শাখায় একটি fetchএবং অতিরিক্ত mergeপরিবর্তনগুলি সম্পাদন করবে ।
পার্থক্য কি? pullটানা শাখা থেকে পরিবর্তনগুলি নিয়ে আপনাকে স্থানীয় শাখা আপডেট করে। এ fetchআপনার স্থানীয় শাখা অগ্রসর করে না।
নিম্নলিখিত ইতিহাস দেওয়া:
সি --- ডি --- ই স্থানীয়
/
এ --- বি --- এফ --- জি রিমোট
mergeএকসাথে দুটি বিকাশের ইতিহাসে যোগ দেয়। এটি আপনার স্থানীয় শাখায় দূরবর্তী শাখার শীর্ষে সরে যাওয়ার পরে পরিবর্তনগুলি পুনরায় প্লে করে এটি করে এবং ফলাফলটি একটি নতুন প্রতিশ্রুতিতে রেকর্ড করে। এই অপারেশন প্রতিটি প্রতিশ্রুতির পূর্বপুরুষ সংরক্ষণ করে।
একটি এর প্রভাব mergeহবে:
সি --- ডি --- ই স্থানীয়
/
এ --- বি --- এফ --- জি --- এইচ রিমোট
rebaseআপনার স্থানীয় শাখায় বিদ্যমান কমিটগুলি নেবে এবং সেগুলি প্রত্যন্ত শাখার উপরে আবার প্রয়োগ করবে। এই অপারেশনটি আপনার স্থানীয় কমিটদের পূর্বপুরুষদের আবার লিখে দেয় writes
একটি এর প্রভাব rebaseহবে:
সি '- ডি' - ই 'স্থানীয়
/
এ --- বি --- এফ --- জি রিমোট
পার্থক্য কি? ক mergeঅঙ্গীকারের পূর্বসূরি পরিবর্তন করে না। একটি rebase
আপনার স্থানীয় প্রতিশ্রুতিগুলির পূর্বসূরীদের পুনর্লিখন করে।
*এই ব্যাখ্যাটি একটি ধরে নেয় যে বর্তমান শাখা একটি স্থানীয় শাখা, এবং যে শাখা যুক্তি হিসাবে নির্দিষ্ট fetch, pull, merge, অথবা rebaseএকটি দূরবর্তী শাখা। এটি স্বাভাবিক ঘটনা। pullউদাহরণস্বরূপ, নির্দিষ্ট শাখা থেকে যে কোনও পরিবর্তন ডাউনলোড করা হবে , আপনার সংগ্রহশালা এবং বর্তমান শাখায় mergeপরিবর্তনগুলি আপডেট করা হবে ।
আনুন বনাম পুল
গিট ফেচ কেবলমাত্র আপনার রেপো ডেটা আপডেট করে তবে গিট টান মূলত একটি আনয়ন সম্পাদন করে এবং তারপরে শাখাটি টেনে নিয়ে যায়
'গিট টান' এবং 'গিট ফেচ' এর মধ্যে পার্থক্য কী?
বনাম রেবাসে মার্জ করুন
আটলসিয়ান সোর্স ট্রি ব্লগ, মার্জ বা রিবেস থেকে :
একত্রিত হওয়া প্রতিটি প্রতিশ্রুতিবদ্ধ ইতিহাসের পূর্বসূরীদের সংরক্ষণের সময় একসাথে দুটি লাইনের বিকাশ নিয়ে আসে।
বিপরীতে, রিবেসিং সোর্স ব্রাঞ্চের পরিবর্তনগুলি পুনরায় লেখার মাধ্যমে উন্নয়নের লাইনগুলিকে একত্রিত করে যাতে তারা গন্তব্য শাখার সন্তান হিসাবে উপস্থিত হয় - কার্যকরভাবে ভান করে যে এই সমস্ত কমিটগুলি গন্তব্য শাখার শীর্ষে লেখা হয়েছিল।
এছাড়াও, শিখুন গিট ব্র্যাঞ্চিং , যা একটি দুর্দান্ত খেলা যা সবেমাত্র হ্যাকারনিউজকে পোস্ট করা হয়েছে ( পোস্টের লিঙ্ক ) এবং প্রচুর শাখা এবং মার্জিং কৌশল শেখায়। আমি বিশ্বাস করি এটি এই ক্ষেত্রে খুব সহায়ক হবে।
git merge <remote>/<branch>। উদাহরণস্বরূপ, যদি আপনার মাস্টার শাখা হয় এবং আপনার দূরবর্তীটির নাম উত্স দেওয়া হয় তবে আপনি এটি করতে পারেন git merge origin/master।
টানা বনাম আনতে :
আমি এটি যেভাবে বুঝতে পারি, git pullএটি কেবল git fetchঅনুসরণ করা হয় git merge। অর্থাৎ আপনি কোনও দূরবর্তী শাখা থেকে পরিবর্তনগুলি আনতে এবং তারপরে এটি বর্তমান শাখায় মার্জ করুন।
পুনর্বাসনা বনাম পুনরায় মার্জ :
আদেশটি যেমন বলেছে তেমন একটি মার্জ করবে; বর্তমান শাখা এবং নির্দিষ্ট শাখার (বর্তমান শাখায়) পার্থক্যগুলি মার্জ করুন। অর্থাৎ কমান্ডটি বর্তমান শাখায় git merge another_branchএকীভূত হবে another_branch।
একটি রিবেস কিছুটা আলাদাভাবে কাজ করে এবং এক ধরণের দুর্দান্ত। যাক আপনি আদেশটি সম্পাদন করুন git rebase another_branch। গিট প্রথমে বর্তমান শাখা এবং এর মধ্যে সর্বশেষতম সাধারণ সংস্করণ খুঁজে পাবে another_branch। অর্থাত্ শাখাগুলি অন্যদিকে সরানোর আগে। তারপরে গিট এই ডাইভারজেন্ট পয়েন্টটি মাথার দিকে নিয়ে যাবেanother_branch । মূলত, ডাইভারজেন্ট পয়েন্টটি নতুন ডাইভারজেন্ট পয়েন্ট থেকে পুনরায় খেলানো হওয়ায় অবশেষে বর্তমান শাখায় সমস্ত চুক্তি রয়েছে । কম শাখা এবং মার্জ করে এটি খুব পরিষ্কার ইতিহাস তৈরি করে।
যাইহোক, এটি কোনও ক্ষতি ছাড়াই নয়! সংস্করণ ইতিহাস যেহেতু "পুনর্লিখন", তাই আপনার স্থানীয় গিট রেপোতে যদি কমিটগুলি বিদ্যমান থাকে তবে আপনার কেবল এটি করা উচিত। এটাই: যদি আপনি কমিটগুলি কোনও দূরবর্তী রেপোতে ঠেলাঠেলি করেন তবে কখনই এটি করবেন না।
প্রত্যাবাসনের বিষয়ে ব্যাখ্যা দেওয়া হয়েছে এই অনলাইন বইয়ে বেশ ভাল, সহজেই বোঝার সহজ চিত্রগুলির সাথে।
মার্জ করার পরিবর্তে রিবেসিংয়ের সাথে টানুন
আমি আসলে রিবেসটি বেশ ব্যবহার করছি তবে সাধারণত এটি টানার সাথে একত্রে থাকে:
git pull --rebase
রিমোট পরিবর্তনগুলি আনবে এবং তারপরে মার্জ করার পরিবর্তে পুনরায় চালু করবে। অর্থাৎ এটি আপনার স্থানীয় স্থানীয় প্রতিশ্রুতিগুলি শেষ বার যখন আপনি কোনও টান সঞ্চালন করেছেন তখন থেকে এটি পুনরায় খেলবে। একত্রীকরণের সাথে সাধারণ টান দেওয়ার চেয়ে আমি আরও ক্লিনার দেখতে পেয়েছি, যা মার্জগুলির সাথে একটি অতিরিক্ত প্রতিশ্রুতি তৈরি করবে।
মার্জ - হেড শাখা প্রতিটি কমিটের ইতিহাসের পূর্বপুরুষ সংরক্ষণ করে একটি নতুন কমিট তৈরি করবে। সমান্তরালভাবে একই শাখায় কাজ করা একাধিক ব্যক্তি যদি মার্জ কমিট করেন তবে ইতিহাস দূষিত হয়ে উঠতে পারে।
রিবেস - নতুন প্রতিশ্রুতি তৈরি না করেই একটি শাখার পরিবর্তনকে অন্য শাখায় পুনরায় লিখে। কোডের ইতিহাস সরল, লিনিয়ার এবং পঠনযোগ্য তবে এটি টানা অনুরোধগুলির সাথে কাজ করে না, কারণ কেউ কী ছোটখাট পরিবর্তন করেছে তা আপনি দেখতে পাচ্ছেন না।
git mergeবৈশিষ্ট্য-ভিত্তিক কর্মপ্রবাহের সাথে ডিল করার সময় বা আমি যদি রিবেসের সাথে পরিচিত না থাকি তখন আমি ব্যবহার করব। তবে, আমি যদি আরও একটি পরিষ্কার, রৈখিক ইতিহাস চাই তবে git rebaseআরও উপযুক্ত। আরও বিশদের জন্য এই মার্জ বা নিবন্ধটি রিবেসটি পরীক্ষা করে দেখুন ।