git - সেরা(এবং নিরাপদ) মাস্টার মধ্যে একটি গিট শাখা একত্রিত করার উপায়




git-merge (6)

master থেকে একটি নতুন শাখা তৈরি করা হয়, আমরা এটা test কল।

master বা অন্যান্য শাখা তৈরি করতে এবং পরে master মধ্যে একত্রীকরণ করতে প্রতিশ্রুতিবদ্ধ যারা অনেক বিকাশকারী আছে।

চলুন test কাজটি বেশ কয়েক দিন লেগেছে এবং আপনি ক্রমাগত master সাথে কাজ করে আপডেট test চালিয়ে যেতে চান।

আমি test থেকে git pull origin master করতে হবে।

প্রশ্ন 1: এটাই সঠিক পদ্ধতি? অন্যান্য ডেভেলপাররা সহজেই একই ফাইলগুলিতে কাজ করতে পারত যেমনটি আমি btw কাজ করেছি।

test আমার কাজ সম্পন্ন করা হয় এবং আমি master ফিরে এটি মার্জ করতে প্রস্তুত। আমি চিন্তা করতে পারেন দুটি উপায়ে এখানে:

উত্তর:

git checkout test
git pull origin master
git push origin test
git checkout master
git pull origin test 

খ:

git checkout test
git pull origin master
git checkout master
git merge test

আমি --rebase ব্যবহার করছি না কারণ আমার বোঝার থেকে, --rebase master থেকে পরিবর্তনগুলি পাবে এবং এর উপরে আমার --rebase স্ট্যাক পাবে তাই এটি অন্য লোকেদের পরিবর্তনগুলি ওভাররাইট করতে পারে।

প্রশ্ন 2: এই দুটি পদ্ধতির মধ্যে কোনটি সঠিক? সেখানে পার্থক্য কি?

এই সবকিছুর লক্ষ্য আমার test শাখাকে master যা ঘটছে তার সাথে আপডেট করা এবং পরবর্তীতে আমি তাদেরকে আবার লিনাক্স হিসাবে সম্ভব হিসাবে টাইমলাইন রাখতে প্রত্যাশিত master ফিরিয়ে আনতে পারি।


আমি কিভাবে এটা করতে হবে

git checkout master
git pull origin master
git merge test
git push origin master

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

গিট সবসময় আপনার এবং অন্যান্য পরিবর্তন সম্মান করার চেষ্টা করে, এবং তাই --rebase হবে। আমি মনে করি না যে আমি সঠিকভাবে এটি ব্যাখ্যা করতে পারি, তাই গিট বইটিতে নজর রাখুন - রিবেসিং বা গিট-প্রস্তুত: একটু বিবরণ দেওয়ার জন্য রিব্রেসিংয়ের প্রয়াস । এটি একটি বেশ শীতল বৈশিষ্ট্য


আমি প্রথমে যত তাড়াতাড়ি সম্ভব পরিষ্কার-বিচ্ছিন্ন শাখা করা হবে। আপনার পরীক্ষা চালান, আপনি রাষ্ট্র চান হিসাবে রাষ্ট্র নিশ্চিত করুন। Git স্কোয়াশ দ্বারা নতুন commits পরিষ্কার করুন।

KingCrunches উত্তর ছাড়া, আমি ব্যবহার করার পরামর্শ

git checkout master
git pull origin master
git merge --squash test
git commit
git push origin master

আপনি হয়তো অন্য শাখাতে অনেকগুলি কাজ করেছেন, যা শুধুমাত্র মাস্টার শাখায় এক সংঘবদ্ধ হওয়া উচিত। প্রতিশ্রুতি ইতিহাসটি যতটা সম্ভব পরিষ্কার রাখা, আপনি মাস্টার শাখার একটি কমিটিতে একবার পরীক্ষা শাখা থেকে আপনার সমস্ত কৃতিত্বগুলি স্কোয়াশ করতে পারেন (এটিও দেখুন: Git: স্কোয়াশ বা স্কোয়াশ না? )। তারপরে আপনি প্রত্যুত্তর বার্তাটি খুব এক্সপ্রেসিক কিছু লিখতে পারেন। কোড digging ছাড়া, পড়তে এবং বুঝতে সহজ যে কিছু।

সম্পাদনা: আপনি আগ্রহী হতে পারে

তাই mybranch , আমি একটি বৈশিষ্ট্য শাখা mybranch জন্য নিম্নলিখিত কাজ শেষ:

মূল থেকে সর্বশেষ পান

$ git checkout master
$ git pull origin master

মার্জ বেস হ্যাশ খুঁজুন:

$ git merge-base mybranch master
c193ea5e11f5699ae1f58b5b7029d1097395196f

$ git checkout mybranch
$ git rebase -i c193ea5e11f5699ae1f58b5b7029d1097395196f

এখন নিশ্চিত করুন যে শুধুমাত্র প্রথমটি pick , বাকিগুলি হল:

pick 00f1e76 Add first draft of the Pflichtenheft
s d1c84b6 Update to two class problem
s 7486cd8 Explain steps better

পরবর্তী একটি খুব ভাল প্রতিশ্রুতি বার্তা নির্বাচন করুন এবং GitHub থেকে ধাক্কা। তারপর পুল অনুরোধ করুন।

পুল অনুরোধের মার্জ করার পরে, আপনি এটি স্থানীয়ভাবে মুছতে পারেন:

$ git branch -d mybranch

এবং GitHub উপর

$ git push origin :mybranch

এই কর্মফল আমি দলের সঙ্গে আমার কাজ ব্যবহার করা হয়। আপনি বর্ণিত হিসাবে দৃশ্যকল্প। প্রথমত, যখন আমি test কাজ করি, তখন আমি মাস্টারের সাথে যে কোনও সময় মাস্টারের সাথে পুনরায় সংযুক্ত হওয়ার জন্য test শাখায় কাজ করেছি।

git pull -r upstream master

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


এটি একটি খুব বাস্তব প্রশ্ন, কিন্তু উপরের সব উত্তর ব্যবহারিক নয়।

মত

git checkout master
git pull origin master
git merge test
git push origin master

এই পদ্ধতির দুটি বিষয় আছে :

  1. এটি অনিরাপদ, কারণ আমরা পরীক্ষা শাখা এবং মাস্টার শাখার মধ্যে কোন দ্বন্দ্ব আছে কিনা তা জানি না।

  2. এটি মাস্টার্সের এক বিভাজন কমিটিতে সমস্ত পরীক্ষা কমিট "সঙ্কুচিত" করবে; যে মাস্টার শাখা উপর বলতে হয়, আমরা পরীক্ষা শাখার সব পরিবর্তন লগ দেখতে পাচ্ছি না।

সুতরাং, যখন আমরা সন্দেহ করি যে সেখানে কিছু দ্বন্দ্ব থাকবে, তখন আমরা জিট ক্রিয়াকলাপগুলি অনুসরণ করতে পারি:

git checkout test
git pull 
git checkout master
git pull
git merge --no-ff --no-commit test

commit merge আগে পরীক্ষা merge , --no-ff দ্বারা একটি দ্রুত-ফরওয়ার্ড কমিট এড়াতে,

দ্বন্দ্ব সম্মুখীন হলে, দ্বন্দ্ব সম্পর্কে বিস্তারিত জানতে এবং সমাধান করার চেষ্টা করতে আমরা git status চালাতে পারি

git status

একবার আমরা দ্বন্দ্ব সমাধান করি, অথবা যদি কোন দ্বন্দ্ব না হয়, আমরা commit এবং তাদেরকে push দিই

git commit -m 'merge test branch'
git push

কিন্তু এই পদ্ধতি পরীক্ষা শাখায় পরিবর্তন হওয়া ইতিহাসগুলি হারাবে এবং এটি অন্যান্য বিকাশকারীদের প্রকল্পটির ইতিহাস বোঝার জন্য মাস্টার শাখাটিকে কঠিন করে তুলবে।

তাই সর্বোত্তম পদ্ধতিটি আমাদের merge পরিবর্তে rebase ব্যবহার করতে হবে (ধরুন, এই সময়ে, আমরা শাখা দ্বন্দ্ব সমাধান করেছি)।

নিম্নলিখিত একটি সহজ নমুনা, উন্নত অপারেশন জন্য, অনুগ্রহ করে http://git-scm.com/book/en/v2/Git-Branching-Rebasing পড়ুন

git checkout master
git pull
git checkout test
git pull
git rebase -i master
git checkout master
git merge test

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

এড়াতে আপনার যা দরকার তা হল: মাস্টার শাখার মতো জনসাধারণের শাখার rebase ব্যবহার করবেন না।

নিচের মত অপারেশন করবেন না :

git checkout master
git rebase -i test

https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing জন্য বিশদ বিবরণ

পরিশিষ্ট:

  • যদি আপনি রিবাউজিং অপারেশন সম্পর্কে নিশ্চিত না হন তবে দয়া করে এখানে পড়ুন: https://git-scm.com/book/en/v2/Git-Branching-Rebasing ব্র্যাঞ্চিং- রিবেসিং

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

মাস্টার এবং শাখা আপ টু ডেট পান:

git checkout master
git pull --rebase origin master
git checkout <branch_name>
git pull --rebase origin <branch_name>

মাস্টার শীর্ষে শাখা মার্জ করুন:

git checkout <branch_name>
git rebase master
git add .
git rebase continue

আপনি Rebase সময় দ্বন্দ্ব মধ্যে চালানো হলে:

প্রথম, ফাইল সংঘাত সমাধান। তারপর:

git add .
git rebase --continue

একবার রিবেস শেষ হলে, মাস্টারের উপরে শাখাটি পুনরায় জমা দিন:

git checkout master
git rebase <branch_name>

git checkout master
git pull origin master
# Merge branch test into master
git merge test

মার্জ করার পরে, যদি ফাইলটি পরিবর্তিত হয়, তবে যখন আপনি একত্রিত হন তখন এটি "সংঘাত সমাধান করুন" এর ত্রুটির মাধ্যমে হবে

তারপরে আপনাকে প্রথমে আপনার সমস্ত বিরোধের সমাধান করতে হবে, আপনাকে আপনার সমস্ত পরিবর্তন আবার করতে হবে এবং তারপরে ধাক্কা দিতে হবে

git push origin master

পরীক্ষার শাখায় পরিবর্তন করেছেন এমনটি ভাল, কারণ তিনি জানতেন যে তিনি কোন পরিবর্তন করেছেন।







git-merge