গিতে মাস্টার থেকে শাখায় পরিবর্তন পান


690

আমার সংগ্রহশালায় আমার একটি শাখা রয়েছে aqযা আমি কাজ করছি।

আমি তখন নতুন কাজের প্রতিশ্রুতিবদ্ধ এবং বাগ ইন master

সেগুলি aqশাখায় প্রবেশ করার সর্বোত্তম উপায় কী ? এর বাইরে আরও একটি নতুন শাখা তৈরি করে এর masterসাথে একত্রীকরণ করব aq?


3
ভবিষ্যতে, আপনি মাস্টার এবং অন্যান্য শাখাগুলির একটি সাধারণ পূর্বপুরুষের কাছ থেকেও আপনার বাগফিক্স শাখাটি শুরু করতে পারেন যার সমাধানগুলির প্রয়োজন হবে, যাতে আপনি অন্য কোনও কিছু না বাছাই করে those সমস্ত শাখায় মার্জ করতে পারেন।
ক্যাসাবেল

2
@ জেফ্রোমি তবে প্রকল্পটিতে কাজ করা একমাত্র ব্যক্তি না হলে তার নিয়ন্ত্রণের বাইরে। অন্যান্য লোকেরা মাস্টার আপডেট করে। জাহান্নাম, আপনি নিজেই তৃতীয় শাখা থেকে মাস্টার আপডেট করতে পারেন, এবং পরিস্থিতি অনিবার্য হবে এবং একটি সাধারণ সমাধানের প্রয়োজন হবে।
আহ্নবিজক্যাড

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

লোকেরা প্রশ্ন করে, এই আদেশটি কি এটি করেgit pull origin my_branch_name
বাশির আল-মোমানি

উত্তর:


794

aqশাখাটি পরীক্ষা করে দেখুন এবং পুনরায় চালু করুন master

git checkout aq
git rebase master

অন্য কোন শাখা থেকে রিবেস আসতে পারে? অর্থাৎ। গিট রিবেস অন্য ব্র্যাঞ্চ? দেখে মনে হচ্ছে আমি আমার প্রশ্নে কিছুটা দূরে ছিলাম, আমি একটি শাখা থেকে শাখা প্রশাখা করে তারপর মূল শাখায় পরিবর্তন করেছি।
স্লি

2
যদি ঠিক থাকে তবে টান অনুরোধটি রিবেস করুন এটি সমস্ত মাস্টার কমিটগুলি দেখায়। আপনি যদি মার্জ / অরিজিনাল মাস্টার ব্যবহার করেন তবে সমস্ত মাস্টার কমিটগুলি 1 টি কমিট হিসাবে দেখানো হবে, যা এটি কোড পর্যালোচনার পক্ষে সহজ করে তোলে।
ফু বার ব্যবহারকারী 10

4
কখনও কখনও, git mergeভাল হবে। উভয় শাখা যদি সময়ের সাথে বিকশিত হয়, তবে আপনার বিবেচনা করা উচিত কোনটি আপনার পক্ষে সেরা।
এরিক 2red

70
পার্টিতে দেরীতে, তবে বনাম সংযুক্তিকে
গীত

7
আপনার যদি শাখা আকের উপর পূর্ববর্তী কমিটগুলি সর্বজনীন হয় তবে পুনরায় শোধ করবেন না। atlassian.com
গীত /

301

আপনি git merge origin/masterযখন আপনার একা শাখায় থাকবেন তখনই আপনার সক্ষম হওয়া উচিত ।

git checkout aq
git merge origin/master

55
যদি রিবেসটি "ভাল" হয় তবে তা নির্দিষ্ট পরিস্থিতির উপর সম্পূর্ণ নির্ভর করে।
বোম্বে

13
আপনি কেন "গিট মার্জ উত্স / মাস্টার" এর পরিবর্তে কেবল "গিট মার্জ মাস্টার" কল করবেন না?
মাইকেল কুলার 15

145
rebaseযদি আপনার শাখা স্থানীয় হয় এবং এতে চাপ দেওয়া না হয় তবে ব্যবহার করুন originmergeযদি আপনার শাখাটি ইতিমধ্যে ঠেলাঠেলি করে থাকে তবে ব্যবহার করুন । rebaseইতিহাস আবার লিখতে হবে।
আবর্জনাবিহীন নির্বাচনকারী

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

8
@garbagecollector আমি রিবেসের বিপক্ষে (আমি পারব, কিন্তু পুনঃব্যবস্থা করবো না) রিবেস নিয়ে জুয়া খেলার কোনও কারণ দেখছি না। এটি কেবল অযথা জটিল জিনিস তৈরি করে। আপনার কাছে সর্বদা প্রশ্ন থাকে "আমি কি এটিকে দূরবর্তী দিকে ঠেলে দিয়েছি?" চিন্তা করা এবং এটি নতুনদের বোঝাতে একটি ব্যথা। কিছু লোক বলে যে এটি মার্জ কমিটগুলি এড়িয়ে চলে। তবে আমি মার্জ কমিট করতে চাই to এগুলি বিশৃঙ্খলা নয়, শাখাগুলি একত্রিত হয়ে গেলে তারা ডকুমেন্ট করে। তাই শেষ বারের মতো, অবশেষে আমরা কীভাবে অভিনয় বন্ধ করতে পারি যে আমরা সবাই মাস্টার প্রতিশ্রুতিবদ্ধ? আপনি যদি লগে লগতে মার্জ কমিটকে এতটা অপছন্দ করেন তবে কেবল তাদেরকে - না-মার্জ করে ফিল্টার করুন।
নুরেটিন

92

মাস্টার করার জন্য প্রথমে চেক আউট করুন:

git checkout master

সমস্ত পরিবর্তন করুন, হটফিক্স এবং কমিট করুন এবং আপনার মাস্টারকে পুশ করুন।

আপনার শাখায় ফিরে যান, 'আক', এবং এতে মাস্টার মার্জ করুন:

git checkout aq
git merge master

আপনার শাখা মাস্টারের সাথে আপ টু ডেট থাকবে। মার্জ করার একটি ভাল এবং মৌলিক উদাহরণ হল 3.2 গিট ব্রাঞ্চিং - বেসিক ব্র্যাঞ্চিং এবং মার্জ করা


25

মাস্টার বাগ ফিক্সগুলি অন্য কমিটগুলির মধ্যে নেই এমন কোনও গ্যারান্টি নেই, সুতরাং আপনি কেবল মার্জ করতে পারবেন না। ডু

git checkout aq
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit3
...

ধরে নিচ্ছি যে এই কমিটগুলি বাগ সংশোধন করে।

তবে এখন থেকে, বাগ ফিক্সগুলি একটি পৃথক শাখায় রাখুন। আপনি ন্যায়বিচার করতে সক্ষম হবেন

git merge hotfixes

আপনি যখন তাদের সমস্ত নিয়মিত দেব শাখায় রোল করতে চান।


17

হয় cherry-pickপ্রাসঙ্গিক শাখায় কমিট করে aqবা শাখাকে masterশাখায় মার্জ করে aq


5
@ আপনি নিজের উত্তর দিয়েছিলেন ... এটি এই পরিস্থিতির সমাধান নয়
এমটেট 88

13

এটি দিয়ে মার্জ করুন aq

git checkout master
git pull
git checkout aq
git merge --no-ff master
git push


7

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

git fetch origin <base branch name>  
git merge FETCH_HEAD

সুতরাং এই ক্ষেত্রে:

git fetch origin master  
git merge FETCH_HEAD

7

এটি ( এখান থেকে ) আমার পক্ষে কাজ করেছে:

git checkout aq
git pull origin master
...
git push

বরাত দিয়ে:

git pull origin masterআপনার শাখার সাথে মাস্টার শাখার সামগ্রীগুলি আনা এবং মার্জ করে এবং একটি মার্জ কমিট তৈরি করে। যদি কোনও মার্জ দ্বন্দ্ব থাকে তবে আপনাকে এই পর্যায়ে জানানো হবে এবং এগিয়ে যাওয়ার আগে আপনাকে অবশ্যই মার্জ কমিটগুলি সমাধান করতে হবে । আপনি যখন নিজের নতুন মার্জ কমিট সহ আপনার স্থানীয় কমিটগুলি দূরবর্তী সার্ভারে ঠেলে দিতে প্রস্তুত হন, তখন চালান git push


গুরুত্বপূর্ণ যে দ্রবীভূতকরণ বিশেষভাবে একত্রীকরণের প্রয়োজন হলে এই সমাধানটি নিখুঁত note
চুদাচোদা

3

আপনার কাছে কয়েকটি বিকল্প রয়েছে। git rebase master aqশাখায় যা প্রতিশ্রুতিবদ্ধ নামগুলি রাখবে, তবে এটি কোনও দূরবর্তী শাখা হলে অস্বীকার করবেন না। আপনি git merge master aqযদি প্রতিশ্রুতিবদ্ধ নামগুলি রাখার বিষয়ে চিন্তা না করেন তবে পারেন । আপনি যদি প্রতিশ্রুতিবদ্ধ নামগুলি রাখতে চান এবং এটি একটি দূরবর্তী শাখা হয় git cherry-pick <commit hash>তবে আপনার শাখায় অঙ্গীকার করে।


0

আপনি একক লাইন চালিয়ে এটিও করতে পারেন।
git merge aq master

এটি সমান

git checkout aq
git merge master

এটি যা করছে তা আপনি করছেন না তা করছে না। git merge a bশাখাগুলি aএবং bবর্তমান শাখায় মার্জ করে । কিন্তু git merge aযখন আপনি শাখা রয়েছে aকিছুই (যা কেন এই একটি বিট দেখে মনে হচ্ছে এটা করছে আপনি কি মনে করেন তা করছেন) করতে হবে। ( Git-scm.com/docs/git- विसর ডকুমেন্টেশন/ … দেখুন ))
মাইকবিটেন

0

সম্পাদনা করুন:

নীচে আমার উত্তরটি মার্জ করার একটি উপায় নথী masterকরে aq, যেখানে আপনি যদি মার্জটির বিশদটি দেখেন তবে এটি মার্জ হওয়ার aqআগে করা পরিবর্তনগুলি তালিকাভুক্ত করে, পরিবর্তিত পরিবর্তনগুলি তালিকাভুক্ত করে master। আমি বুঝতে পেরেছি যে এটি সম্ভবত আপনি চান না, এমনকি যদি আপনি এটি মনে করেন!

শুধু:

git checkout aq
git merge master

ভাল.

হ্যাঁ, এই সহজ একত্রীকরণ দেখাব যে থেকে পরিবর্তন masterকরা হয় নি aqএই মুহুর্তে, না অন্যান্য উপায় বৃত্তাকার; তবে তা ঠিক আছে - যেহেতু ঘটেছে! পরে, যখন আপনি শেষ পর্যন্ত আপনার শাখাটি এতে masterমার্জ করবেন, তখনই যখন মার্জটি শেষ অবধি আপনার সমস্ত পরিবর্তনগুলি দেখানো হবে master(যা আপনি যা চান ঠিক তেমনই, এবং প্রতিশ্রুতিবদ্ধ যেখানে লোকেরা যে কোনও উপায়ে সেই তথ্য সন্ধান করতে পারে)।

আমি পরীক্ষা করে দেখেছি এবং নীচের পদ্ধতির উপরের সাধারণ পদ্ধতির হিসাবে ঠিক একই পরিবর্তনগুলি ( মূল পরিবর্তন এবং এর মধ্যে মূল বিভাজন aqথেকে শুরু হওয়া সমস্ত পরিবর্তনগুলি) দেখানো হয়েছে , যখন আপনি শেষ পর্যন্ত সবকিছুকে আবার মিশ্রিত করে । সুতরাং আমি মনে করি এর একমাত্র আসল অসুবিধা (অতিরিক্ত-জটিল এবং অ-মানক হওয়া ছাড়া ...: - /) হ'ল আপনি যদি সাম্প্রতিক পরিবর্তনগুলি ঘুরে দেখেন এবং এটি একীভূত হওয়ার পরে চলে যায় তবে নীচের সংস্করণটি নীচে ফিরে যাবে 'ভুল' শাখা, যা আপনাকে হাত দিয়ে ঠিক করতে হবে (উদাহরণস্বরূপ & দিয়ে )।aqmastermastergit reset --hard HEAD~<n>git refloggit reset --hard [sha]


[সুতরাং, আমি আগে যা ভেবেছিলাম তা হ'ল:]

এর সাথে একটি সমস্যা রয়েছে:

git checkout aq
git merge master

কারণ মার্জ কমিটে প্রদর্শিত পরিবর্তনগুলি (যেমন আপনি যদি এখন বা পরে গিথুব, বিটবকেট বা আপনার পছন্দসই স্থানীয় গিট ইতিহাসের দর্শকের দিকে তাকান) তবে মাস্টারে করা পরিবর্তনগুলি যা আপনি যা চান তা নাও হতে পারে।

অন্য দিকে

git checkout master
git merge aq

শো AQ তৈরি, যা সম্ভবত পরিবর্তন হয় কি আপনি চান। (বা, কমপক্ষে, প্রায়শই এটি আমি যা চাই!) তবে সঠিক পরিবর্তনগুলি দেখানো মার্জটি ভুল শাখায় রয়েছে!

কি করে মানাবে?!

সম্পূর্ণ প্রক্রিয়াটি, আকের উপরের পরিবর্তনগুলি দেখানো একীভূত অঙ্গীকারের সমাপ্তি (উপরের দ্বিতীয় সংশ্লেষ অনুসারে), তবে একা শাখায় প্রভাবিত হওয়া মার্জটির সাথে:

git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq

এটি: আককে মাস্টারের সাথে একীভূত করে, আক-তে একই মার্জ করে দ্রুত-ফরোয়ার্ড করে, মাস্টারে এটি পূর্বাবস্থায় ফিরে আসে এবং আপনাকে আবার আক-এ ফিরিয়ে দেয়!

আমার মনে হচ্ছে আমি কিছু মিস করছি - এটি সম্ভবত এমন কিছু বলে মনে হচ্ছে যা আপনি অবশ্যই চান, এবং এমন কিছু যা খুব কঠিন।

এছাড়াও, রিবেস সমতুল্য নয়। এটি আক উপর করা কমিটগুলির টাইমস্ট্যাম্প এবং পরিচয় হারাতে পারে, যা আমি চাই তাও নয়।


0

পরিস্থিতি:

  • আমি মাস্টার বল শাখা -১ থেকে একটি শাখা তৈরি করেছি এবং এটি আমার লোকাল টানছি।
  • আমার বন্ধু মাস্টার বলে শাখা -২ থেকে একটি শাখা তৈরি করেছে।
  • তিনি মাস্টার কিছু কোড পরিবর্তন প্রতিশ্রুতিবদ্ধ।
  • এখন আমি এই পরিবর্তনগুলি মাস্টার শাখা থেকে আমার স্থানীয় শাখায় নিয়ে যেতে চাই।

সমাধান

git stash // to save all existing changes in local branch
git checkout master // Switch to master branch from branch-1
git pull // take changes from the master
git checkout branch-1 // switchback to your own branch
git rebase master // merge all the changes and move you git head  forward
git stash apply // reapply all you saved changes 

"গিট স্ট্যাশ প্রয়োগ" কার্যকর করার পরে আপনি আপনার ফাইলটিতে বিরোধ খুঁজে পেতে পারেন। আপনাকে এটি ম্যানুয়ালি ঠিক করতে হবে এবং এখন আপনি চাপ দেওয়ার জন্য প্রস্তুত।

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