মাস্টার এবং বিকাশ শাখাগুলির মধ্যে "গিট টান" বা "গিট একীকরণ"


243

কয়েকটি পরিবর্তন নিয়ে কাজ করার জন্য আমার masterশাখা এবং একটি developশাখা রয়েছে। আমার masterমধ্যে থেকে পরিবর্তনগুলি মার্জ করা দরকার develop, তবে শেষ পর্যন্ত সবকিছুকে এর developমধ্যে মিশিয়ে ফেলতে হবে master। আমার মনে দুটি ভিন্ন কার্যপ্রবাহ রয়েছে:

  1. git pull origin masterমধ্যে developশাখা
  2. git merge masterমধ্যে developশাখা

এটি করার সর্বোত্তম উপায় কোনটি এবং কেন?



2
git pull= git fetch+git merge FETCH_HEAD
ইউশা আলেয়াউব

উত্তর:


104

পুনর্বাসনের বিষয়ে সাবধানতা অবলম্বন করুন। যদি আপনি কারও সাথে আপনার বিকাশকারী শাখা ভাগ করে নিচ্ছেন তবে রিবাজে জিনিসগুলি গোলযোগ করতে পারে। রিবেস শুধুমাত্র আপনার নিজস্ব স্থানীয় শাখার জন্য ভাল।

থাম্বের নিয়ম, আপনি যদি শাখাটি উত্সে ঠেলেছেন তবে পুনরায় ব্যবহার করবেন না। পরিবর্তে, মার্জ ব্যবহার করুন।


তবুও কি এটি পুনরায় git push origin rebasedBranch --forceচালু করা এবং একটি ব্যক্তিগত রেপোতে নিরাপদ ? একমাত্র ব্যবহারকারী নিজেই।
k0pernikus

হ্যাঁ, আপনি যদি একমাত্র ব্যবহারকারী হন তবে অবশ্যই এটি নিরাপদ। আমি একমাত্র ব্যবহারকারী যখনই আমি গিট পুশ - ফোর্স ব্যবহার করি। :)
টাইলার রিক

3
আমি এরিকের সতর্কবাণী প্রতিধ্বনিত করি। যদিও, আপনার নিজের দূরবর্তী শাখাটিও রিবেস করা পুরোপুরি ঠিক। রিবেস এবং মার্জ উভয় দিয়েই খেলুন এবং আপনি প্রত্যেকের উপকারিতা এবং কৌশলগুলি বুঝতে পারবেন এবং সেগুলি কখন ব্যবহার করবেন তা শিখবেন।
ইয়ান লটিনস্কি


ইয়ানলোটিনস্কি আপনার লিঙ্কটি রিবেস সম্পর্কিত কোনও নিবন্ধের দিকে ইঙ্গিত করে না। লংশুট, তবে আপনার কি এখনও সঠিক লিঙ্ক আছে? :)
ড্যানিয়েল সেরোদিও

347

এই কর্মপ্রবাহটি আমার পক্ষে সবচেয়ে ভাল কাজ করে:

git checkout -b develop

... কিছু পরিবর্তন করুন ...

... নোটিশ মাস্টার আপডেট করা হয়েছে ...

... পরিবর্তনগুলি বিকাশ করতে প্রতিশ্রুতিবদ্ধ ...

git checkout master
git pull

... এই পরিবর্তনগুলি বিকাশে ফিরিয়ে আনুন ...

git checkout develop
git rebase master

... আরও কিছু পরিবর্তন করুন ...

... তাদের বিকাশের প্রতিশ্রুতিবদ্ধ ...

... এগুলিকে মাস্টারে মার্জ করুন ...

git checkout master
git pull
git merge develop

2
এইভাবে আমিও কাজ করি এবং আমি এটি ভালভাবে কাজ করি বলে মনে করি। আমি অবশ্য করি না এমন একটি জিনিস আছে এবং git pullএটি ফাইনালের আগে সঠিক git merge develop। এর উদ্দেশ্য কী?
সিআরডিএক্স

... নোটিশ মাস্টার আপডেট হওয়ার পরে ... অংশ, যদি আপনি প্রতিশ্রুতি না দেন তবে চেকআউট মাস্টার আপনার স্থানীয় পরিবর্তনগুলি বিকাশ করতে মুছে দেবে না?
a1an

1
@ a1an না, তবে আপনি যদি এটি প্রতিশ্রুতিবদ্ধ না হন তবে পরিবর্তনগুলি মাস্টার শাখায় চলে যাবে এবং প্রতিশ্রুতি না দেওয়া পর্যন্ত গিট আপনাকে টানতে দেবে না।
এলেমজাই

5
@ সিআরডিএক্স সম্ভাবনা হ'ল আপনি অন্য শাখাগুলি স্থানীয় শাখাকে আপনার স্থানীয় মাস্টারের সাথে একীভূত করার আগে রিমোট মাস্টারে মার্জ করা হয়েছে। আপনি স্থানীয় মাস্টারের অনুলিপিতে রিমোট মাস্টার পরিবর্তনগুলি টানুন এবং আনেন। এভাবেই বুঝেছি।
তারুন

12
git pull --rebase origin masterআপনার বিকাশ শাখায় কিছুটা দ্রুত।
নাথান লিলিয়েনথাল

24

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


10
ভাল পরামর্শ, ধরে developনেওয়া অন্য কারও সাথে ভাগ করে নেওয়া হয়নি।
কার্ল বিলেফেল্ট

1
@ কার্লবিলিফেল্ড যদি অন্য অবদানকারীদের সাথে develop ভাগ করে নেওয়া হয়, developযখন কিছু হটফিক্সকে সরাসরি ধাক্কা দেওয়া হয় তখন আমরা কীভাবে আপডেট করব master? আমাদের একীকরণ করা উচিত, মানে git checkout master && git pull --rebase && git checkout develop && git merge master? আমি উপরে সর্বাধিক ভোট দেওয়া উত্তরের উপর একটি মন্তব্য রেখেছি, যা এই উদ্বেগের বিবরণ দেয়।
Modulitos

5

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

> git clone git://<remote_repo_path>/ <local_repo>
> cd <local_repo>
> git checkout -b develop
....do a lot of work on develop
....do all the commits
> git pull origin master
> git rebase master develop

উপরের পদক্ষেপগুলি নিশ্চিত করবে যে আপনার বিকাশ শাখা সর্বদা মাস্টার শাখা থেকে সর্বশেষ পরিবর্তনগুলির শীর্ষে থাকবে। একবার আপনি বিকাশকারী শাখাটি সম্পন্ন করার পরে এবং এটি মাস্টারের সর্বশেষ পরিবর্তনগুলিতে প্রত্যাবর্তিত হয় আপনি কেবল এটি আবার মার্জ করতে পারেন:

> git checkout -b master
> git merge develop
> git branch -d develop

1

আমার থাম্বের নিয়মটি হ'ল:

rebaseসঙ্গে শাখা জন্য একই নামের , mergeঅন্যথায়।

একই নামের উদাহরণ হতে পারে master, origin/masterএবং otherRemote/master

যদি developকেবল স্থানীয় সংগ্রহস্থলে উপস্থিত থাকে এবং এটি সর্বদা সাম্প্রতিক origin/masterপ্রতিশ্রুতি ভিত্তিক হয় তবে আপনাকে এটি কল করা উচিত masterএবং সেখানে সরাসরি কাজ করা উচিত । এটি আপনার জীবনকে সহজতর করে এবং জিনিসগুলি বাস্তবে যেমন উপস্থাপন করে: আপনি সরাসরি masterশাখায় বিকাশ করছেন ।

যদি developভাগ করা থাকে তবে এটিকে পুনরায় সাজানো উচিত নয় master, কেবল এটির সাথে আবার একত্রিত করুন --no-ff। আপনি উন্নয়নশীল হয় developmasterএবং developআলাদা আলাদা নাম রয়েছে, কারণ আমরা চাই যে এগুলি আলাদা আলাদা জিনিস হোক এবং আলাদা থাকুক। তাদের সাথে একই না rebase

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