জিআইটি এক শাখায় মার্জ করুন


49

আমি একটি নতুন শাখায় একটি নতুন বৈশিষ্ট্য বিকাশ করছি এবং পাশাপাশি আমার মাস্টার শাখায় বেশ কয়েকটি পরিবর্তন প্রতিশ্রুতিবদ্ধ করেছি।

মাস্টার ব্রাঞ্চটি কি নতুন করে শাখায় এটি আপ টু ডেট রাখার জন্য মার্জ করা সম্ভব হবে যাতে নতুন বৈশিষ্ট্যটি শেষ হওয়ার পরে আমার খুব বেশি সংযুক্তির বিরোধ না ঘটে?


আপনি কি গিট-মার্জ করার চেষ্টা করেছেন? এখানে সহায়তা করুন
কারাতেডোগ

উত্তর:


56

আপনি git merge masterবা হয় পারেন git rebase master, এই ক্ষেত্রে আমি গিট রিবেস পছন্দ করব ।

কারণ git rebaseএটি এমনভাবে তৈরি করে যেন বৈশিষ্ট্য শাখায় পরিবর্তনগুলি মাস্টার শাখায় পরিবর্তনের উপরে করা হয়েছিল, যা সংস্করণ গ্রাফকে সহজ করে তোলে।

রি-বেসের ফলে

থেকে উদাহরণ গ্রহণ Git রি-বেসের ফলে ম্যানুয়াল , git rebase masterশাখায় feature:

      A---B---C feature                             A'--B'--C' feature
     /                   --rebase-->               /
D---E---F---G master                  D---E---F---G master

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

git rebase masterশাখায় আসার পরের ফলাফলটি featureহ'ল:

      ( A---B---C )
       /
      /       A'--B'--C' feature
     /       /
D---E---F---G master

কমিটস এ, বি, সি পুনর্বাসনের পরে ঝুঁকছে তবে তা অ্যাক্সেসযোগ্য git reflog feature

একত্রিত করা

যদি কেউ আপনার শাখা টানতে থাকে, বা আপনি এটি অন্য কোথাও ঠেলাঠেলি করেছেন, অন্যদিকে বিভ্রান্তি এবং অতিরিক্ত কাজ এড়াতে আপনার পরিবর্তে আপনার এটিতে মার্জ করা উচিত। আপস্ট্রি রিবেস থেকে পুনরুদ্ধার দেখুন ।

এটি git merge masterশাখায় ফলাফল feature:

      A---B---C feature                    A---B---C---M feature
     /                   --merge-->       /       ,---’
D---E---F---G master                 D---E---F---G master

বিকল্পভাবে, আপনি git merge featureযদি শাখায় থাকেন তবে masterএটি দেখতে এরকম হবে:

      A---B---C feature                    A---B---C feature
     /                   --merge-->       /         \
D---E---F---G master                 D---E---F---G---M master

আপনি পুনর্বাসনা কেন পছন্দ করেন এবং পার্থক্য কী তা আপনার ব্যাখ্যা করা উচিত। রিবেস একটি লিনিয়ার ইতিহাস তৈরি করে - এটি এই প্রশ্নের উপযুক্ত হতে পারে না।
আন্দ্রেয়াস রেহাম

ঠিক আছে যদি আমি এটি ভালভাবে বুঝতে পারি: নতুন বৈশিষ্ট্যটি এখনও শেষ না হয়ে থাকলে আমাকে মাস্টার শাখাটি পরীক্ষা করতে হবে এবং এটি শেষ হলে একটি রিবেস করতে হবে?
এমএনএমএল

না, বৈশিষ্ট্য শাখাটি পরীক্ষা করে দেখুন, করুন git rebase master, এবং এটি বৈশিষ্ট্য শাখায় পরিবর্তনগুলি "পুনর্বার" করবে যাতে তারা মাস্টার শাখায় পরিবর্তনের উপর ভিত্তি করে "ভিত্তিক" হয়। মাস্টার ব্রাঞ্চের পরিবর্তনগুলি যদি বৈশিষ্ট্য শাখার পরিবর্তনের সাথে দ্বন্দ্ব করে, গিট আপনাকে সেগুলি সমাধান করতে এবং চালিয়ে যেতে, এড়িয়ে যাওয়া, বা গর্ভপাত বন্ধ করতে বলবে। যদি আপনি অনিশ্চিত বোধ করেন তবে আপনি পরীক্ষা শাখার সাথে এটি ব্যবহার করে চেকআউট করতে পারবেন git checkout -b test-feature feature(ধরে নিবেন যে আপনার বৈশিষ্ট্য শাখার নাম দেওয়া হয়েছে "বৈশিষ্ট্য")।
ক্রিস্টোফার হামারস্ট্রিম

2
আপনার অর্থ "আমার শাখাটি আর দেখতে পাবে না"? যাইহোক, git rebaseকেবল তখনই ব্যবহার করা উচিত যখন শাখাটি বিতরণ করা হয়নি, যা আমি ধরে নিয়েছিলাম যেহেতু আপনি বলেছিলেন যে এটি একটি নতুন শাখা, সেজন্য দুঃখিত। আমি যে দস্তাবেজের সাথে লিঙ্ক করেছি সেগুলিতে আপস্ট्रीम রিবেস থেকে পুনরুদ্ধার দেখুন । git mergeপরিবর্তে আপনাকে ব্যবহার করতে হবে। আপনি git reflogযদি এটি ফিরে পেতে চান তবে আপনি নিজের আগের বৈশিষ্ট্য শাখার মাথাটি সন্ধান করতে ব্যবহার করতে পারেন ।
ক্রিস্টোফার হামারস্ট্রিম

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