গিট টান এবং গিট টান --rebase মধ্যে পার্থক্য


311

আমি কিছুক্ষণ আগে গিট ব্যবহার শুরু করেছি এবং জটিলতাগুলি পুরোপুরি বুঝতে পারি না। আমার এখানে প্রাথমিক প্রশ্নটি হল একটি git pullএবং এর মধ্যে পার্থক্যটি অনুসন্ধান করা git pull --rebase, যেহেতু --rebaseবিকল্পটি যুক্ত করা খুব আলাদা কিছু করে বলে মনে হচ্ছে না: কেবল একটি টান দেয়।

পার্থক্য বোঝার জন্য আমাকে সাহায্য করুন।




উত্তর:


326

git pull= git fetch+ git mergeআপ স্ট্রিম শাখা ট্র্যাকিংয়ের বিরুদ্ধে

git pull --rebase= git fetch+ git rebaseআপ স্ট্রিম শাখা ট্র্যাকিংয়ের বিরুদ্ধে

যদি আপনি কীভাবে git mergeএবং git rebaseপার্থক্য জানতে চান তবে এটি পড়ুন


12
এটি এতই উক্তি টুকুনি git pull --rebaseহিসাবে একই git fetchএবং git rebaseকিভাবে এটা মূলত, কিন্তু এটা না ঠিক শব্দার্থগতভাবে সমতুল্য। কিছু পার্থক্য রয়েছে, যার কয়েকটি এখানে ব্যাখ্যা করা হয়েছে। gitolite.com/git-pull--rebase
w0rp

8
এটিই আমি স্কট মেয়ার্সের একটি বাক্যাংশ ধার করার জন্য "সুবিধাজনক মিথ্যা" বলব। এটি নির্বিশেষে এটি ব্যাখ্যা করার একটি ভাল উপায়।
w0rp

খুব সংক্ষেপে। আমি পার্থক্য বুঝতে পারি না। কী এত গুরুত্বপূর্ণ fetch?
সবুজ

ভালভাবে ব্যাখ্যা করা হয়েছে, ধন্যবাদ
জাকি মোহাম্মদ

240

কখনও কখনও আমাদের একটি প্রবাহ থাকে যা আমাদের উপর নির্ভর করে একটি শাখাটিকে রিবাজড / রিবাউন্ড করে। এটি একটি বড় সমস্যা হতে পারে - আমরা যদি নিচে প্রবাহিত হই তবে আমাদের জন্য অগোছালো দ্বন্দ্ব সৃষ্টি করে causing

যাদুটি হ'ল git pull --rebase

একটি সাধারণ গিট টান হ'ল আলগাভাবে বলা, এরকম কিছু (আমরা এই সমস্ত উদাহরণে রিমোট নামে পরিচিত একটি রিমোট এবং একটি শাখা ব্যবহার করব):

# assume current checked out branch is "foo"
git fetch origin
git merge origin/foo

প্রথম নজরে, আপনি মনে করতে পারেন যে গিট টান --rebase ঠিক এটি করে:

git fetch origin
git rebase origin/foo

তবে এগুলি কার্যকর হবে না যদি প্রবাহিত রিবাজে কোনও "স্কোয়াশিং" জড়িত (যার অর্থ কমিটগুলির প্যাচ-আইডিগুলি কেবল তাদের ক্রম নয়, পরিবর্তিত হয়েছিল)।

যার অর্থ গিট টান --rebase এর থেকে কিছুটা বেশি করতে হবে। এটি কী করে এবং কীভাবে তার একটি ব্যাখ্যা এখানে।

আসুন বলি যে আপনার প্রারম্ভিক বিন্দুটি এটি:

a---b---c---d---e  (origin/foo) (also your local "foo")

সময় কেটে যায় এবং আপনি নিজের "ফু" শীর্ষে কিছু প্রতিশ্রুতি করেছেন:

a---b---c---d---e---p---q---r (foo)

এদিকে, অসামাজিক ক্রোধের উপযুক্ততায়, প্রবাহের রক্ষণাবেক্ষণকারী তার "ফু" কে কেবল প্রত্যাবর্তনই করেনি, এমনকি তিনি স্কোয়াশ বা দু'টি ব্যবহার করেছেন। তাঁর প্রতিশ্রুতিবদ্ধ শৃঙ্খলা এখন এইরকম দেখাচ্ছে:

a---b+c---d+e---f  (origin/foo)

এই সময়ে একটি গিট টান বিশৃঙ্খলা হতে পারে। এমনকি একটি গিট আনা; গিট রিবেস উত্স / ফু এটিকে কাটবে না, কারণ একদিকে "বি" এবং "সি" করে এবং অন্যদিকে "বি + সি" করে, বিরোধ করবে। (এবং একইভাবে ডি, ই এবং ডি + ই সহ)।

কি git pull --rebaseকরে, এই ক্ষেত্রে, হল:

git fetch origin
git rebase --onto origin/foo e foo

এটি আপনাকে দেয়:

 a---b+c---d+e---f---p'---q'---r' (foo)

আপনি এখনও দ্বন্দ্ব পেতে পারেন তবে সেগুলি আসল সংঘাত হতে পারে (p / q / r এবং a / b + c / d + e / f এর মধ্যে), এবং b / c এর সাথে দ্বন্দ্বের কারণে বিবাদ নয় etc.

(এবং কিছুটা সংশোধিত) থেকে উত্তর নেওয়া হয়েছে:
http://gitolite.com/git-pull--rebase


9
এটি সেরা উত্তর। আপনি চূড়ান্ত ফলাফলটি পরিবর্তন করতে চান a---b+c---d+e---f---p'---q'---r' (foo)যেহেতু পুনর্বাসের হ্যাশগুলি পরিবর্তিত হয়।
বাসটিয়েন

22
এই উত্তরটি gitolite.com/git-pull--rebase থেকে অনুলিপি করা হয়েছিল এবং ভারব্যাটিমটি আটকানো হয়েছিল এবং সেই পৃষ্ঠাটিতে লাইসেন্স অনুসারে অ্যাট্রিবিউশন অন্তর্ভুক্ত করা উচিত।
ওয়াইল্ডকার্ড

এটি একটি দুর্দান্ত ব্যাখ্যা। তবে আমার একটা পরিস্থিতি হয়েছিল, যেখানে আমি প্রতিশ্রুতিবদ্ধ Aছিলাম এবং আমি প্রবাহের রেপোতে একটি জনসংযোগ প্রেরণ করেছি যা গ্রহণযোগ্য হয়েছিল। তারপরে আমি যখন git pull --rebaseপ্রবাহের রেপোর বিপরীতে কাজ করেছি তখন A'টানা আপস্ট্রিম রেপোর উপরে আমি নতুন প্রতিশ্রুতি পাইনি । আসলে কোন A'অস্তিত্ব ছিল না। এটি কি Aসিস্টেমে একীভূত হওয়ার কারণে ? বা এটি কারণ যে প্রবাহের উপরের ও আমার পুনর্বাসনের মধ্যে কোনও পার্থক্য ছিল না?
সিএমসিডিগ্রাগনকাই

আমি বর্তমানে গিট টিউটোরিয়ালটি দিয়ে যাচ্ছি এবং আরও বুঝতে এই প্রতিক্রিয়াটি ব্যবহার করছি git pull --rebase। তবে একটি বিষয় যা এই কাল্পনিক পরিস্থিতিতে আমাকে বিভ্রান্ত করে তা হ'ল আপস্ট্রিম রক্ষণাবেক্ষণকারী প্রকল্পের ইতিহাস পরিবর্তন করেছে যা ইতিমধ্যে স্থানীয় বিকাশকারীদের ভাণ্ডারগুলিতে টানা হয়েছে। এটি কি সাধারণভাবে খারাপ অভ্যাস নয়? যদি তিনি স্কোয়াশটি কমিট / ইতিহাস পুনর্লিখন করতে চান, তবে এই জাতীয় দ্বন্দ্ব এড়াতে এটি কেন্দ্রীয় ভান্ডারে সংহত করার আগে এটি করা উচিত ছিল।
বিএমসেটি 148

44

মনে করুন স্থানীয় শাখায় আপনার দুটি কমিট রয়েছে:

      D---E master
     /
A---B---C---F origin/master

"গিট টান" পরে, হবে:

      D--------E  
     /          \
A---B---C---F----G   master, origin/master

"গিট টান --রেবাস" এর পরে, কোনও মার্জ পয়েন্ট জি থাকবে না Note দ্রষ্টব্য যে ডি এবং ই পৃথক কমিট করে:

A---B---C---F---D'---E'   master, origin/master

1
এটি এ --- বি --- সি --- ডি '--- ই' - এফ?
prgmrDev

5
@prgmrDev কেন এফের আগে ডি এবং ই প্রবেশ করানো হবে?
জন

1
ঠিক কি git rebaseতাই না? তবে আমরা কথা বলছি git pull --rebase। এবং তারা বিভিন্ন জিনিস।
সবুজ

10

কোনও সংঘর্ষের খুব সাধারণ ক্ষেত্রে

  • রিবাজ সহ: আপনার স্থানীয় রিমোট হেডের শীর্ষে প্রতিশ্রুতি দেয় এবং মার্জ / মার্জ কমিট তৈরি করে না ases
  • ছাড়া / সাধারণ: মার্জ করে এবং মার্জ কমিট তৈরি করে

আরো দেখুন:

man git-pull

আরও স্পষ্টভাবে, গিট টান প্রদত্ত প্যারামিটারগুলির সাথে গিট আনতে চলে এবং পুনরুদ্ধারকৃত শাখা প্রধানকে বর্তমান শাখায় মার্জ করার জন্য গিট গিলে কল করে। --Rebase সহ, এটি গিট সংযোজনের পরিবর্তে গিট রিবেস চালায়।

আরও দেখুন:
কখন আমাকে গিট টান --rebase ব্যবহার করা উচিত?
http://git-scm.com/book/en/Git-Branching-Rebasing


3
আর সংঘর্ষের ক্ষেত্রে?
Rndm

1
আপনি এগুলো নিজে এবং তারপর সমাধান করতে বলা হবে - রি-বেসের ফলে অগ্রসর: git sdd modified-file; git rebase --continueবা একত্রীকরণ: git add modified-file; git commit;যেখানে modified-fileআপনি নিজে / mergetool পরিবর্তিত আপনার স্থানীয় ফাইল
drahnr

কি বিশেষ সম্পর্কে fetch? কেন তারা দুটি rebaseপ্রবাহ তৈরি করেছিল ? 1) git rebaseএবং 2) git pull --rebase?
সবুজ

7

এর জন্য মার্জ এবং রিবেসের মধ্যে পার্থক্যটি বোঝা গুরুত্বপূর্ণ।

রিবেসগুলি হ'ল পরিবর্তনগুলি কীভাবে স্তরক্রমের শীর্ষ থেকে নীচের দিকে যেতে হবে এবং একত্রিত হওয়াগুলি কীভাবে তারা উপরের দিকে প্রবাহিত হয়।

বিশদগুলির জন্য দেখুন - http://www.derekgourlay.com/archives/428


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