মাস্টার থেকে গিট শাখা আপডেট করুন


674

আমি গিতে নতুন, এবং এখন আমি এই পরিস্থিতিতে আছি:

  • আমার চারটি শাখা রয়েছে (মাস্টার, বি 1, বি 2, এবং বি 3)।
  • আমি বি 1-বি 3-তে কাজ করার পরে, আমি বুঝতে পেরেছিলাম যে আমার কাছে শাখা মাস্টারের কিছু পরিবর্তন আছে যা অন্য সমস্ত শাখায় হওয়া উচিত।
  • আমার যা প্রয়োজন এবং আমি তা পরিবর্তন করেছি master... এখানে আমার সমস্যা:

আমি masterশাখা কোড সহ অন্যান্য সমস্ত শাখা কীভাবে আপডেট করব ?



58
তবুও আরও একটি সহজ কাজ গিট দ্বারা কঠিন করে তুলেছে। গিট ডেভসকে তাদের এসডিএলসি লুপের প্রতিক্রিয়া হিসাবে স্ট্যাক ওভারফ্লো ব্যবহার করা উচিত। 300,000 লোককে গিটের কর্মপ্রবাহের সাথে মারাত্মকভাবে ভুল কিছু চিহ্নিত করা উচিত। তাদের একটি ইউএক্স বিশেষজ্ঞ নেওয়া উচিত কারণ তারা স্পষ্টত তাদের নিজেরাই এটি গিট করতে পারে না।
jww

উত্তর:


619

আপনার দুটি বিকল্প রয়েছে:

প্রথমটি মার্জ, তবে এটি সংযুক্তির জন্য অতিরিক্ত প্রতিশ্রুতি তৈরি করে।

প্রতিটি শাখা চেকআউট:

git checkout b1

তারপরে মার্জ করুন:

git merge origin/master

তারপরে চাপ দিন:

git push origin b1

বিকল্পভাবে, আপনি একটি রিবেস করতে পারেন:

git fetch
git rebase origin/master

15
আমি এই পদ্ধতির সম্পর্কে একটি উদ্বেগ আছে। আমি যখন গিট লগ - অনুগ্রহ পরিচালনা করি তখন গ্রাফটি দেখায় যে মাস্টার আসলে বিষয় শাখায় মিশে গেছে। এই দীর্ঘমেয়াদে কোন সমস্যা হতে পারে? আমি ভেবেছিলাম সেরা অনুশীলনটি সর্বদা বিষয় শাখাকে মাস্টারে ফিরিয়ে দেওয়া। অনুগ্রহ করে মন্তব্য করুন.
প্যাট্রিক

2
আপনি যদি মার্জ ওয়ার্কফ্লো নিয়ে চলেছেন তবে এই সমস্যাটির সন্ধান করুন: randyfay.com/node/89
আহলগ্রেন

22
আপনি বি 1 তে মাস্টারকে মার্জ করছেন। আপনি কেন got push origin master... কোন মানে নেই। আপনি মাস্টার শাখা পরিবর্তন করছেন না। আমি মনে করি এটি 119 টি upvote এর সাথে একটি ভুল: /
ইয়ভেস ল্যাঙ্গ

22
মার্জ পদ্ধতিটি ব্যবহার করবেন না, git rebase masterসঠিক উত্তরটি ব্যবহার করে
ওয়েস্টন গাঙ্গার

6
আমাদের মধ্যে যারা পরে পড়ছেন - @ টাইপ্পো সম্পর্কে কার্সনের উদ্বেগ লেখকের সম্পাদনা দ্বারা সমাধান করা হয়েছিল। এছাড়াও, নীচের দ্বিতীয় সর্বোচ্চ upvated উত্তরটি মূলত এই উত্তরটির মতো একই কথা বলেছে তবে শাখা কাঠামোর ডায়াগ্রাম এবং আপনি কেন পুনরায় ব্যবহার করতে চান না তা সতর্কতার সাথে।
beyondtheteal

494

আপনার কাছে মূলত দুটি বিকল্প রয়েছে:

  1. আপনি একীভূত। এটি আসলে বেশ সহজ এবং পুরোপুরি স্থানীয় অপারেশন:

    git checkout b1
    git merge master
    # repeat for b2 and b3
    

    এটি ইতিহাস যেমনটি ঘটেছিল ঠিক তেমনটিই ছেড়ে দেয়: আপনি মাস্টারকে সমর্থন করেছেন, আপনি সমস্ত শাখায় পরিবর্তন করেছেন এবং শেষ পর্যন্ত আপনি মাস্টার থেকে তিনটি শাখায় পরিবর্তনগুলি অন্তর্ভুক্ত করেছেন।

    gitএই পরিস্থিতিটি সত্যিই খুব ভালভাবে পরিচালনা করতে পারে, এটি একই সাথে সমস্ত দিকগুলিতে সংহত হওয়ার জন্য তৈরি করা হয়েছে। আপনি বিশ্বাস করতে পারেন এটি সঠিকভাবে সমস্ত থ্রেড একসাথে পেতে সক্ষম হবে। এটি শাখা b1মার্জ করে master, বা masterমার্জ করে b1, মার্জ কমিট সমস্ত গিটকে একই রকম দেখায় তা বিবেচনা করে না । পার্থক্যটি হ'ল, কোন শাখাটি এই মার্জ কমিটের দিকে ইশারা করে।

  2. আপনি পুনর্বাসন। একটি এসভিএন, বা অনুরূপ পটভূমিযুক্ত ব্যক্তিরা এটিকে আরও স্বজ্ঞাগত বলে মনে করেন। কমান্ডগুলি মার্জ হওয়া ক্ষেত্রে অ্যানালগ করে:

    git checkout b1
    git rebase master
    # repeat for b2 and b3
    

    লোকেরা এই পদ্ধতির পছন্দ করে কারণ এটি সমস্ত শাখায় রৈখিক ইতিহাস ধরে রাখে। তবে, এই রৈখিক ইতিহাসটি মিথ্যা, এবং আপনার সচেতন হওয়া উচিত যে এটি is এই প্রতিশ্রুতিবদ্ধ গ্রাফটি বিবেচনা করুন:

    A --- B --- C --- D <-- master
     \
      \-- E --- F --- G <-- b1
    

    একত্রীকরণের ফলাফল সত্য ইতিহাসে:

    A --- B --- C --- D <-- master
     \                 \
      \-- E --- F --- G +-- H <-- b1
    

    রিবেসটি আপনাকে এই ইতিহাস দেয়:

    A --- B --- C --- D <-- master
                       \
                        \-- E' --- F' --- G' <-- b1
    

    মুল বক্তব্যটি হ'ল প্রতিশ্রুতিবদ্ধ E', F'এবং G'সত্যই কখনও উপস্থিত ছিল না এবং সম্ভবত কখনও পরীক্ষাও করা হয়নি। তারা সংকলন নাও করতে পারে। রিবেসের মাধ্যমে অযৌক্তিক কমিট তৈরি করা আসলে বেশ সহজ, বিশেষত যখন পরিবর্তনগুলি masterউন্নয়নের জন্য গুরুত্বপূর্ণ b1

    এই ফল হতে পারে, আপনি পার্থক্য করতে পারে না যা তিন করে এর E, Fএবং Gআসলে একটি রিগ্রেশন পরিচয় মান কমা git bisect

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


আমি অন্য উৎস শাখা (না মাস্টার) এবং অতিরিক্ত পদক্ষেপ মার্জ করা হয় এই সুন্দর উত্তর যোগ করতে মার্জ (সর্বশেষ কোড স্থানীয়ভাবে আছে) আগের আমার স্থানীয় রেপো তে এটি আপডেট করতে ছিল: git checkout <source branch> git pull। তারপরে উপরের সাথে চালিয়ে যান: git checkout b1...
রোড

3
দীর্ঘ সময়ের এসভিএন ব্যবহারকারী হিসাবে, আমি রিবাজে মার্জ বিকল্পটি পছন্দ করি: যে কোনও সংস্করণ নিয়ন্ত্রণ ব্যবহার করা আপনার পক্ষে এবং কেন পরিবর্তন হয়েছে তার সঠিক রেকর্ড রাখা খুব গুরুত্বপূর্ণ। আপাত ইতিহাস সহজ করার জন্য আমি রিবেসের আবেদন দেখতে পাচ্ছি, তবে আপনার আবার ফিরে গিয়ে ই ', এফ', জি 'এর মন্তব্যগুলি যুক্ত করা উচিত - এবং সম্ভবত এই মন্তব্যে রিবাজটি স্বয়ংক্রিয়ভাবে যুক্ত করা উচিত। অন্যথায় যদি বিল্ড / টেস্ট / টেস্ট-মোতায়েন প্রক্রিয়াটি জি'র উপর ভেঙে যায় তবে আপনাকে কেন সম্পূর্ণ তথ্য ছাড়াই পরিবর্তনগুলি করা হয়েছে তা নিয়ে কাজ করতে হবে।
উইলসি

12
ইতিহাসটি একটি মিথ্যা
পাইরেটমুরে

ধন্যবাদ আমি একটি শাখা কোডকে অন্য শাখায় মার্জ করার জন্য "গিট একত্রিত কোনও-শাখা-নাম" ব্যবহার করি। স্থানীয়ভাবে আমি শাখা 1 এর কোড পরীক্ষা করতে পারি যখন আমি শাখা 2 তে থাকি
প্রীতি

1
@ ব্ল্যাম্ব git mergeএবং উভয়ের সাথেই মার্জ সংঘাত ঘটে git rebase। তাদের এড়ানো কোন নেই। git rebaseআপনাকে রিবিসিংয়ের বিভিন্ন ধাপগুলি গোপন করার সুযোগ দেওয়ার সুবিধা রয়েছে (অর্থাত্ প্রতিটি পর্যায়ে দ্বন্দ্বের পরিমাণ হ্রাস করার জন্য বিভিন্ন শাখায় ক্রম একই শাখাকে ছাড় দেওয়া)। তবুও, ইতিহাস সম্পর্কে কোনও রিবেস মিথ্যা কথা বলা এই জাতীয় মাল্টিস্টেজ রিবেসে ভালভাবে চলা খুব সহজ করে তোলে ... এজন্য আমি সর্বদা একত্রীকরণকে পছন্দ করি, এমনকি যখন এর অর্থ হ'ল বেশ কয়েকটি মার্জ কমিট দিয়ে ইতিহাসকে খণ্ডন করা দরকার to ।
মাস্টার -

238

git rebase masterএটি করার সঠিক উপায়। সংযুক্তির অর্থ হ'ল মার্জ করার জন্য একটি প্রতিশ্রুতি তৈরি করা হবে, তবে রিবেসিং হবে না।


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

6
আপনি যদি কেবল রিমোট শাখায় কাজ করছেন তবে আপনি রিটযুক্ত স্থানীয় শাখার সাথে আপনার রিমোট শাখাটি আপডেট করতে গিট পুশ - ফোর্স অরিজিন বৈশিষ্ট্যটি করতে পারেন। stackoverflow.com/questions/8939977/...
stormwild

7
রিবেস এবং উভয় কাজ একীভূত করুন, পুনরায় বেসরকারী শাখাগুলির জন্য সেরা, কারণ এটি একটি ক্লিনার ইতিহাসের গ্রাফ দেয়। এই উত্তরটি সবচেয়ে ভাল
জুনচেন লিউ

5
স্পষ্টতা (একক ব্যবহারকারী বা ক্ষুদ্র-দলের জন্য দুর্দান্ত) বা অগোছালো সত্য (মাল্টি-অবদানকারী কোড শাখার জন্য - রক্ষণাবেক্ষণের জন্য প্রয়োজনীয় (আমার অভিজ্ঞতায় - ওয়াইএমএমভি)) এর মধ্যে বাণিজ্য-বন্ধ সম্পর্কে আরও পরিষ্কার হওয়া দরকার Need
উইলসি


53

আপনি যদি অফ-অফ-অফ কোনও শাখায় কাজ করছেন বা আপনি যখন কোনও কিছুতে কাজ করছেন তখন অন্য শাখায় প্রচুর পরিমাণে ঘটেছে, তবে আপনার শাখাটি মাস্টারের কাছে পুনরায় চালু করা ভাল। এটি ইতিহাসকে পরিপাটি করে রাখে এবং জিনিসগুলি অনুসরণ করা অনেক সহজ করে তোলে।

git checkout master
git pull
git checkout local_branch_name
git rebase master
git push --force # force required if you've already pushed

মন্তব্য:

  • আপনি যে শাখাগুলিতে অন্যদের সাথে সহযোগিতা করেছেন সেগুলি পুনরায় ব্যবহার করবেন না।
  • আপনার যে শাখায় আপনি মার্জ হয়ে যাবেন যা সর্বদা মাস্টার নাও হতে পারে সেগুলি আপনার পুনরায় চালু করা উচিত।

Http://git-scm.com/book/ch3-6.html এ রিবিসিংয়ের একটি অধ্যায় রয়েছে এবং ওয়েবে সেখানে অন্যান্য সংস্থানগুলির লোড।


সহজ সমাধানের জন্য ধন্যবাদ
অন্য লম্বা লোক

18

@ মাস্টার সেরা উত্তর দিয়েছেন। সংক্ষেপে:

git checkout master #
git pull # update local master from remote master
git checkout <your_branch>
git merge master # solve merge conflicts if you have`

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


13

আপনার মাস্টার শাখার অনুলিপি সহ অন্যান্য শাখা যেমন (ব্যাকআপ) আপডেট করতে। আপনি যে কোনও উপায়ে অনুসরণ করতে পারেন (রিবেস বা মার্জ) ...

  1. পুনর্বাসনা করুন (ব্যাকআপ শাখায় কোনও অতিরিক্ত প্রতিশ্রুতি দেওয়া হবে না)।
  2. শাখা মার্জ করুন (ব্যাকআপ শাখায় স্বয়ংক্রিয়ভাবে একটি অতিরিক্ত প্রতিশ্রুতি থাকবে)।

    দ্রষ্টব্য: রিবেস একটি নতুন বেস প্রতিষ্ঠা করা ছাড়া কিছুই নয় (একটি নতুন অনুলিপি)

git checkout backup
git merge master
git push

(অন্যান্য শাখাগুলির জন্য পুনরাবৃত্তি করুন যদি কোনও ব্যাকআপ 2 এবং ইত্যাদি।,)

git checkout backup
git rebase master
git push

(অন্যান্য শাখাগুলির জন্য পুনরাবৃত্তি করুন যদি কোনও ব্যাকআপ 2 এবং ইত্যাদি।,)



1

এই সমস্যার জন্য দুটি বিকল্প রয়েছে।

1) গিট রিবেস

2) গিট মার্জ

একত্রীকরণের ক্ষেত্রে কেবল উভয়ের উপরেই পৃথক, ইতিহাসে অতিরিক্ত প্রতিশ্রুতি থাকবে

1) গিট চেকআউট শাখা (বি 1, বি 2, বি 3)

2) গিট রিবেস উত্স / মাস্টার (সংঘাতের ক্ষেত্রে স্থানীয়ভাবে গিট রিবেস - নিয়ন্ত্রণ চালিয়ে সমাধান করুন)

3) গিট ধাক্কা

বিকল্পভাবে, গিট মার্জ বিকল্পটি একই ফ্যাশন

1) গিট চেকআউট "আপনার_ব্রাঞ্চ" (বি 1, বি 2, বি 3)

2) গিট মার্জ মাস্টার

3) গিট ধাক্কা


0

মাস্টার থেকে আপনার শাখা আপডেট করতে:

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