গিটের মধ্যে কীভাবে টানা তুলনায় আলাদা করা যায় এবং কীভাবে পুনর্বাসনের চেয়ে আলাদা করা যায়?


160

আমি এটা বুঝতে পারি না। আমি ওয়েবে এবং বইগুলিতে প্রচুর পড়ছি এবং এমন কিছু যা কেবল আমার মাথায় থাকে না। কেউ দয়া করে আমাকে নিম্নলিখিতগুলির ডামি সংস্করণটি দিতে পারেন:

  • গিট আনতে বনাম টান
  • গিট মার্জ বনাম রিবাজে

24
আমি প্রশ্নকারীর প্রতি সহানুভূতি জানাই। ডকুমেন্টেশন এবং পরামর্শ এত ভারী এবং সম্ভাব্য কার্যপ্রবাহের ক্রমগুলি এত বিশাল যে কোনও ব্যক্তি বিভ্রান্ত হয়ে পড়ে। আপনার মাথা সবেমাত্র বিস্ফোরিত হয়েছে এবং কেউ কী জিজ্ঞাসা করতে পারে তা যথেষ্ট জানেন না, এটি ঠিক এটি স্পষ্ট নয়।
এড র্যান্ডাল

3
কেন পেট্রেলা উত্তর চয়ন হিসাবে গ্রহণ করা হয় না?
আরশসফট

@ আরশসফ্ট কারণ 2013 এর পরে তাকে দেখা যায়নি
ভিডিএক্স

উত্তর:


415

আনতে বনাম টান

fetch আপনার সংগ্রহস্থল ডেটা আপডেট করে দূরবর্তী * শাখা থেকে যে কোনও পরিবর্তন ডাউনলোড করবে, কিন্তু আপনার স্থানীয় * শাখাটি অপরিবর্তিত রেখে দেবে।

pullআপনার স্থানীয় শাখায় একটি fetchএবং অতিরিক্ত mergeপরিবর্তনগুলি সম্পাদন করবে ।

পার্থক্য কি? pullটানা শাখা থেকে পরিবর্তনগুলি নিয়ে আপনাকে স্থানীয় শাখা আপডেট করে। এ fetchআপনার স্থানীয় শাখা অগ্রসর করে না।

পুনর্বাসনা বনাম মার্জ

নিম্নলিখিত ইতিহাস দেওয়া:

          সি --- ডি --- ই স্থানীয়
         /
    এ --- বি --- এফ --- জি রিমোট

mergeএকসাথে দুটি বিকাশের ইতিহাসে যোগ দেয়। এটি আপনার স্থানীয় শাখায় দূরবর্তী শাখার শীর্ষে সরে যাওয়ার পরে পরিবর্তনগুলি পুনরায় প্লে করে এটি করে এবং ফলাফলটি একটি নতুন প্রতিশ্রুতিতে রেকর্ড করে। এই অপারেশন প্রতিটি প্রতিশ্রুতির পূর্বপুরুষ সংরক্ষণ করে।

একটি এর প্রভাব mergeহবে:

          সি --- ডি --- ই স্থানীয়
         /
    এ --- বি --- এফ --- জি --- এইচ রিমোট

rebaseআপনার স্থানীয় শাখায় বিদ্যমান কমিটগুলি নেবে এবং সেগুলি প্রত্যন্ত শাখার উপরে আবার প্রয়োগ করবে। এই অপারেশনটি আপনার স্থানীয় কমিটদের পূর্বপুরুষদের আবার লিখে দেয় writes

একটি এর প্রভাব rebaseহবে:

                  সি '- ডি' - ই 'স্থানীয়
                 /
    এ --- বি --- এফ --- জি রিমোট

পার্থক্য কি? mergeঅঙ্গীকারের পূর্বসূরি পরিবর্তন করে না। একটি rebase আপনার স্থানীয় প্রতিশ্রুতিগুলির পূর্বসূরীদের পুনর্লিখন করে।

*এই ব্যাখ্যাটি একটি ধরে নেয় যে বর্তমান শাখা একটি স্থানীয় শাখা, এবং যে শাখা যুক্তি হিসাবে নির্দিষ্ট fetch, pull, merge, অথবা rebaseএকটি দূরবর্তী শাখা। এটি স্বাভাবিক ঘটনা। pullউদাহরণস্বরূপ, নির্দিষ্ট শাখা থেকে যে কোনও পরিবর্তন ডাউনলোড করা হবে , আপনার সংগ্রহশালা এবং বর্তমান শাখায় mergeপরিবর্তনগুলি আপডেট করা হবে ।


31
এটি প্রতিটি অনুশীলনের পিছনে বিতর্কে না গিয়েই সহজ এবং সর্বোত্তম ব্যাখ্যা। ধন্যবাদ!
জোনাথন এস ফিশার

3
একদম সুবর্ণ উত্তর
চেজমসকাল

5
আশা করি আমি এই উত্তরটি "পছন্দসই" করতে পারতাম। সম্ভবত আমি এটি মুদ্রণ করব এবং আমার দেয়ালে টেপ করব।
LarsH

2
আমি স্ট্যাকওভারফ্লোতে পেয়েছি সেরা উত্তরগুলির সেরা বলব, আপনাকে ধন্যবাদ
শাহাব জে

1
যদি আনয়ন কেবল দূরবর্তী শাখা থেকে পরিবর্তনগুলি ডাউনলোড করে সংগ্রহস্থল ডেটা আপডেট করে তবে স্থানীয় শাখাটি অপরিবর্তিত রেখে দেয়, তবে যদি ওয়ার্কিং ডিরেক্টরি পরিবর্তনগুলি প্রদর্শন / প্রতিফলিত না করে তবে আনার কী লাভ? আমার প্রশ্নটি প্রাথমিকভাবে ছিল যে আমি অন্য কারও দ্বারা পরিবর্তনগুলি কীভাবে দেখতে পেলাম এবং তারপরে সিদ্ধান্ত নেব যে আমি তাদের আমার কার্যনির্বাহী ডিরেক্টরিতে একীভূত করতে চাই (যেমন এটি আমার কাজটি ভঙ্গ না করে তা নিশ্চিত করার জন্য অন্যান্য লোকের পরিবর্তনগুলির সাথে পরীক্ষা) তবে আমি এখনও রয়েছি বিভ্রান্ত যে কিভাবে? আমার কি কেবল পল করা ও পরীক্ষা / এক্সপ্লোর করা উচিত এবং যদি সমস্যাযুক্ত হয় তবে একটি হার্ড রিসেট করা উচিত?

28

আনুন বনাম পুল

গিট ফেচ কেবলমাত্র আপনার রেপো ডেটা আপডেট করে তবে গিট টান মূলত একটি আনয়ন সম্পাদন করে এবং তারপরে শাখাটি টেনে নিয়ে যায়

'গিট টান' এবং 'গিট ফেচ' এর মধ্যে পার্থক্য কী?


বনাম রেবাসে মার্জ করুন

আটলসিয়ান সোর্স ট্রি ব্লগ, মার্জ বা রিবেস থেকে :

একত্রিত হওয়া প্রতিটি প্রতিশ্রুতিবদ্ধ ইতিহাসের পূর্বসূরীদের সংরক্ষণের সময় একসাথে দুটি লাইনের বিকাশ নিয়ে আসে।

বিপরীতে, রিবেসিং সোর্স ব্রাঞ্চের পরিবর্তনগুলি পুনরায় লেখার মাধ্যমে উন্নয়নের লাইনগুলিকে একত্রিত করে যাতে তারা গন্তব্য শাখার সন্তান হিসাবে উপস্থিত হয় - কার্যকরভাবে ভান করে যে এই সমস্ত কমিটগুলি গন্তব্য শাখার শীর্ষে লেখা হয়েছিল।

এছাড়াও, শিখুন গিট ব্র্যাঞ্চিং , যা একটি দুর্দান্ত খেলা যা সবেমাত্র হ্যাকারনিউজকে পোস্ট করা হয়েছে ( পোস্টের লিঙ্ক ) এবং প্রচুর শাখা এবং মার্জিং কৌশল শেখায়। আমি বিশ্বাস করি এটি এই ক্ষেত্রে খুব সহায়ক হবে।


ধন্যবাদ ফিলিপস .. সুতরাং আমি যদি কোনও রিমোট থেকে আনতে পারি তবে আমার মাস্টার শাখার আপডেট হবে না? এছাড়াও মনে হচ্ছে আমার আরও বেশি
চালিত

রিবাজ বনাম একত্রীকরণ আপনার উদ্দেশ্য কী তার উপর নির্ভর করে, মনে রাখবেন যে রিবেস সবকটি ইতিহাসের পুনর্লিখন করে। এবং হ্যাঁ, যদি আপনি কেবল আনেন তবে মাস্টার শাখাটি পরিবর্তন করা হবে না, দূরবর্তী পরিবর্তনগুলি প্রয়োগ করতে আপনাকে মার্জ করতে হবে (বা টানতে হবে)
ফিলিপ সাবিনো

git merge <remote>/<branch>। উদাহরণস্বরূপ, যদি আপনার মাস্টার শাখা হয় এবং আপনার দূরবর্তীটির নাম উত্স দেওয়া হয় তবে আপনি এটি করতে পারেন git merge origin/master
ফিলিপ সাবিনো

সুতরাং মনে হচ্ছে আমার সর্বদা একটি গিট চেকআউট মাস্টার গিট ফেচ
গিফ ডিফারেন্স

8

টানা বনাম আনতে :

আমি এটি যেভাবে বুঝতে পারি, git pullএটি কেবল git fetchঅনুসরণ করা হয় git merge। অর্থাৎ আপনি কোনও দূরবর্তী শাখা থেকে পরিবর্তনগুলি আনতে এবং তারপরে এটি বর্তমান শাখায় মার্জ করুন।


পুনর্বাসনা বনাম পুনরায় মার্জ :

আদেশটি যেমন বলেছে তেমন একটি মার্জ করবে; বর্তমান শাখা এবং নির্দিষ্ট শাখার (বর্তমান শাখায়) পার্থক্যগুলি মার্জ করুন। অর্থাৎ কমান্ডটি বর্তমান শাখায় git merge another_branchএকীভূত হবে another_branch

একটি রিবেস কিছুটা আলাদাভাবে কাজ করে এবং এক ধরণের দুর্দান্ত। যাক আপনি আদেশটি সম্পাদন করুন git rebase another_branch। গিট প্রথমে বর্তমান শাখা এবং এর মধ্যে সর্বশেষতম সাধারণ সংস্করণ খুঁজে পাবে another_branch। অর্থাত্ শাখাগুলি অন্যদিকে সরানোর আগে। তারপরে গিট এই ডাইভারজেন্ট পয়েন্টটি মাথার দিকে নিয়ে যাবেanother_branch । মূলত, ডাইভারজেন্ট পয়েন্টটি নতুন ডাইভারজেন্ট পয়েন্ট থেকে পুনরায় খেলানো হওয়ায় অবশেষে বর্তমান শাখায় সমস্ত চুক্তি রয়েছে । কম শাখা এবং মার্জ করে এটি খুব পরিষ্কার ইতিহাস তৈরি করে।

যাইহোক, এটি কোনও ক্ষতি ছাড়াই নয়! সংস্করণ ইতিহাস যেহেতু "পুনর্লিখন", তাই আপনার স্থানীয় গিট রেপোতে যদি কমিটগুলি বিদ্যমান থাকে তবে আপনার কেবল এটি করা উচিত। এটাই: যদি আপনি কমিটগুলি কোনও দূরবর্তী রেপোতে ঠেলাঠেলি করেন তবে কখনই এটি করবেন না।

প্রত্যাবাসনের বিষয়ে ব্যাখ্যা দেওয়া হয়েছে এই অনলাইন বইয়ে বেশ ভাল, সহজেই বোঝার সহজ চিত্রগুলির সাথে।


মার্জ করার পরিবর্তে রিবেসিংয়ের সাথে টানুন

আমি আসলে রিবেসটি বেশ ব্যবহার করছি তবে সাধারণত এটি টানার সাথে একত্রে থাকে:

git pull --rebase

রিমোট পরিবর্তনগুলি আনবে এবং তারপরে মার্জ করার পরিবর্তে পুনরায় চালু করবে। অর্থাৎ এটি আপনার স্থানীয় স্থানীয় প্রতিশ্রুতিগুলি শেষ বার যখন আপনি কোনও টান সঞ্চালন করেছেন তখন থেকে এটি পুনরায় খেলবে। একত্রীকরণের সাথে সাধারণ টান দেওয়ার চেয়ে আমি আরও ক্লিনার দেখতে পেয়েছি, যা মার্জগুলির সাথে একটি অতিরিক্ত প্রতিশ্রুতি তৈরি করবে।


সুতরাং আমি যদি কাজ করছি এবং শাখা করছি এবং আমি একটি ধাক্কা দেওয়ার আগে আমি এটি আবার মাস্টারের সাথে একীভূত করতে চাই। আমার মাস্টার চেকআউট করা উচিত, তারপরে রিবেস ফিক্স পাবেন?
techsjs2013

আমি এখনও স্ট্যান্ড মার্জ বনাম
রিবাজেসের

আমি মনে করি পেস্ট্রেলা থেকে উত্তর দ্বারা প্রদত্ত চিত্রগুলি পার্থক্যটি বেশ স্পষ্টভাবে দেখায়। এছাড়াও, চেক আউট করুন: git-scm.com/book/en/Git-Branching- রিবেসিং - যা এটি ব্যাখ্যা করার জন্য একটি সুন্দর শালীন কাজ করে (উত্তরটির সাথে একই লিঙ্ক, তবে অলসদের জন্য আবার দেওয়া হয়েছে)।
স্টেইনার

0

মার্জ - হেড শাখা প্রতিটি কমিটের ইতিহাসের পূর্বপুরুষ সংরক্ষণ করে একটি নতুন কমিট তৈরি করবে। সমান্তরালভাবে একই শাখায় কাজ করা একাধিক ব্যক্তি যদি মার্জ কমিট করেন তবে ইতিহাস দূষিত হয়ে উঠতে পারে।

রিবেস - নতুন প্রতিশ্রুতি তৈরি না করেই একটি শাখার পরিবর্তনকে অন্য শাখায় পুনরায় লিখে। কোডের ইতিহাস সরল, লিনিয়ার এবং পঠনযোগ্য তবে এটি টানা অনুরোধগুলির সাথে কাজ করে না, কারণ কেউ কী ছোটখাট পরিবর্তন করেছে তা আপনি দেখতে পাচ্ছেন না।

git mergeবৈশিষ্ট্য-ভিত্তিক কর্মপ্রবাহের সাথে ডিল করার সময় বা আমি যদি রিবেসের সাথে পরিচিত না থাকি তখন আমি ব্যবহার করব। তবে, আমি যদি আরও একটি পরিষ্কার, রৈখিক ইতিহাস চাই তবে git rebaseআরও উপযুক্ত। আরও বিশদের জন্য এই মার্জ বা নিবন্ধটি রিবেসটি পরীক্ষা করে দেখুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.