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


493

আমার dmgr2 (উন্নয়ন) নামে একটি শাখা আছে এবং আমি মাস্টার শাখা (লাইভ সাইট) থেকে টানতে এবং সমস্ত পরিবর্তনগুলি আমার উন্নয়ন শাখায় অন্তর্ভুক্ত করতে চাই। এই কাজ করতে একটি ভাল উপায় আছে কি? পরিবর্তনগুলি সম্পাদন করার পরে আমি যা করার পরিকল্পনা করেছিলাম তা এখানে:

git checkout dmgr2
git pull origin master

এটি আমার উন্নয়ন শাখায় সরাসরি পরিবর্তনগুলি টানতে পারে, বা আমার কি এই ভুল আছে?


1
প্রথমে আপনার সমস্ত পরিবর্তনগুলি ডিএমজিআর 2 শাখায় কমিট করুন। এবং তারপরে মাস্টারকে নির্দেশ করুন 1. গিট চেকআউট মাস্টার এবং তারপরে সর্বশেষ পরিবর্তনটি পান 2. গিট টান 3. গিট মেশান ডিএমজিআর ২ 4. গিট পুশ-ইউ উত্স মাস্টার এবং তারপরে আপনার ডিএমজিআর 2 এ ফিরে যান g.গিট চেকআউট dmgr2
mat_vee

আমি ইতিমধ্যে dmgr2 শাখায় আমার সমস্ত পরিবর্তন প্রতিশ্রুতিবদ্ধ করেছি, দুঃখিত এটি যোগ করতে ভুলে গেছেন
ম্যাথু কলি

1
আমি যদি পদক্ষেপ 4 করি, তবে আমার বিকাশটি মাস্টার হিসাবে পরিবর্তিত হবে? আমি এটি করতে চাই না
ম্যাথু কলি

আপনি যা বলছেন তাই আপনি কি আপনার মাস্টার শাখা থেকে আপনার দেব শাখায় পরিবর্তন আনতে চান?
JcKelley

9
সাথে devশাখায় স্যুইচ করুন git checkout dev। তারপরে git pull --rebase origin master। আপনি যদি ভাগ্যবান হন তবে কোনও বিরোধ হবে না এবং দেবের সর্বশেষ পরিবর্তন হবে।
jww

উত্তর:


722

আপনার তালিকাভুক্ত পদক্ষেপগুলি কাজ করবে, তবে আরও দীর্ঘ উপায় যা আপনাকে আরও বিকল্প দেয়:

git checkout dmgr2      # gets you "on branch dmgr2"
git fetch origin        # gets you up to date with origin
git merge origin/master

fetchকমান্ড যেকোনো সময়ে সম্পন্ন করতে পারার আগে merge, অর্থাত্, আপনি ক্রম অদলবদল করতে পারেন আনা এবং চেকআউট, কারণ fetchমাত্র দূরবর্তী নামে (ওভার যায় origin) এবং এটি বলছে: "গিম্মি সবকিছু আপনি যে আমি না আছে ", অর্থাত্, সমস্ত শাখায় সমস্ত কমিট করে। এগুলি আপনার সংগ্রহস্থলে অনুলিপি করা হয় তবে রিমোটে অবস্থিত origin/branchকোনও শাখার জন্য নামকরণ branchকরা হয়।

এই মুহুর্তে আপনি যে কোনও ভিউয়ার ( git log, gitkইত্যাদি) ব্যবহার করতে পারেন যে "তাদের কাছে কী আছে" যা আপনার নেই এবং এটি বিপরীতে। কখনও কখনও এটি শুধুমাত্র উষ্ণ ফাজি অনুভূতির জন্য দরকারী ("আহ, হ্যাঁ, এটি আসলে যা আমি চাই") এবং কখনও কখনও এটি কৌশলগুলি সম্পূর্ণরূপে পরিবর্তনের জন্য কার্যকর ("ওহো, আমি এখনও সেই জিনিসটি চাই না")।

অবশেষে, mergeকমান্ড দেওয়া কমিট, যা আপনি যেমন নাম দিতে পারেন লাগে origin/master, এবং যাহা এটা যখন আপনি চালাতে উপর, আনতে যাই হোক না কেন শাখা আপনি হয় যে কমিট এবং তার পূর্বপুরুষদের লাগে merge। আপনি fast োকাতে --no-ffবা --ff-onlyএকটি ফাস্ট-ফরোয়ার্ড প্রতিরোধ করতে পারেন , বা যদি পছন্দ হয় তবেই যদি ফলাফলটি দ্রুত অগ্রসর হয় তবেই মার্জ করতে পারেন।

আপনি যখন ক্রমটি ব্যবহার করবেন:

git checkout dmgr2
git pull origin master

pullকমান্ড নির্দেশ করে চালানোর জন্য Git git fetch, এবং তারপর নৈতিক সমতুল্য git merge origin/master। তাই এই হল প্রায় হাতে দুই ধাপ করছেন হিসাবে একই, কিন্তু কিছু সূক্ষ্ম পার্থক্য যে সম্ভবত খুব আপনাকে বিষয়ে না হয়। (বিশেষত fetchদ্বারা চালিত পদক্ষেপটি কেবলমাত্র পুনরায়pull নিয়ে আসে এবং এটি আপনার রেপোতে রেফটিকে আপডেট করে না: 1 কোনও নতুন প্রতিশ্রুতিবদ্ধ যা কেবল বিশেষ রেফারেন্স দ্বারা উল্লেখ করা হয় wind ) origin/masterFETCH_HEAD

আপনি যদি আরও স্পষ্টত ব্যবহার করেন git fetch origin(তবে optionচ্ছিকভাবে চারপাশে দেখুন) এবং তারপরে git merge origin/masterক্রম, আপনি নেটওয়ার্কটি জুড়ে masterশুধুমাত্র একটি fetchরান নিয়ে রিমোটের সাথে নিজের স্থানীয়টিকে আপ টু ডেট আনতে পারেন :

git fetch origin
git checkout master
git merge --ff-only origin/master
git checkout dmgr2
git merge --no-ff origin/master

এই ক্ষেত্রে.


1 এই দ্বিতীয় অংশটি পরিবর্তন করা হয়েছে - আমি বলি "স্থির" - গিট 1.8.4-এ, যা এখন "দূরবর্তী শাখা" রেফারেন্সকে সুবিধাবাদীভাবে আপডেট করে। (রিলিজ নোটগুলি যেমন বলেছিল, আপডেটটি এড়িয়ে যাওয়ার ইচ্ছাকৃত নকশার সিদ্ধান্ত ছিল, তবে এটি প্রমাণিত হয়েছে যে আরও লোকেরা এই গিট আপডেটটি পছন্দ করে। আপনি যদি পুরানো রিমোট-ব্রাঞ্চ এসএইএ -১ চান, এটি ডিফল্টে সংরক্ষণ করা হবে) , এবং এইভাবে পুনরুদ্ধারযোগ্য থেকে পুনরুদ্ধারযোগ্য This এটি প্রবাহের রিবাসগুলি সন্ধানের জন্য একটি নতুন গিট 1.9 / 2.0 বৈশিষ্ট্য সক্ষম করে)


28
আমি কেবল একটি, আহ, বন্ধুকে জিজ্ঞাসা করছি - আপনার এখানে থাকা প্রথম কোড ব্লকটি কীভাবে পূর্বাবস্থায় ফেরাবেন (চেকআউট / আনুন / মার্জ)?
ধনী ব্র্যাডশো

10
@ রিচব্র্যাডশো: git checkoutসাধারণত অ-ধ্বংসাত্মক এবং সাধারণত কোনটিকে পূর্বাবস্থায় ফেলার কোনও কারণ নেই git fetch, তাই মনে হচ্ছে আপনি কীভাবে একীভূত প্রতিশ্রুতিটি ব্যাকআপ করবেন তা জিজ্ঞাসা করছেন। উত্তরটি অন্যান্য কমিটের মতো একই: হয় git resetবা হয় git revert। জন্য অপ্রকাশিত পরিবর্তন git resetসাধারণত সেরা পদ্ধতি; অন্যের ইতিমধ্যে পরিবর্তনগুলির জন্য আরও git revertভাল হতে পারে তবে লিনাস টর্ভাল্ডের
একীভূতিকে

2
@ ওয়েবেডটিডিডি: আমি প্রশ্নটি বুঝতে পারি না। গ্রাফ কমিট (দেখার জন্য কমান্ড একটি নম্বর আছে gitk, git log --graphসহ বা ছাড়া --oneline, ইত্যাদি) এবং আপনি যা করতে পারেন git showবা git show -mকোনো মার্জ কমিট, বা ব্যবহারের git diff। এই সমস্ত ক্ষেত্রে, আপনি কমান্ড-লাইনের কমান্ডটি প্রবেশ করার সাথে সাথে প্রোগ্রামটি নির্দিষ্ট করছেন।
টেরিক

1
@ টোরেক: আপনার উপায়টি চেষ্টা করেছেন: গিট চেকআউট শাখা এবং তারপরে গিট পুলের উত্স মাস্টার, তবে এটি সমস্ত মাস্টার পরিবর্তনকে স্থানীয়ভাবে প্রতিশ্রুতিবদ্ধ হওয়া উচিত যা তাদের প্রতিশ্রুতিবদ্ধ ইতিহাস এবং বার্তাগুলি দিয়ে টানতে না পেরে স্থানীয়ভাবে আপডেট করার পরে মাস্টার এবং শাখায় স্যুইচ করে, "গিট রিবেস মাস্টার" সমস্ত দ্বন্দ্ব সমাধানের জন্য কাজ করে এবং তারপরে আমি "গিট পুল --রেবাস" যুক্ত করে আবার সমস্ত বিবাদকে পরিচালনা করি এবং তারপরে গিট পুশ অরিজ শাখাটি সমস্ত প্রান্তিককরণের জন্য। আমার ধারণা, এর আরও ভাল উপায় থাকা উচিত - আমি ঠিক আছি?
ব্যবহারকারী 10556443

1
@ টোরেক: আমি যে ফলাফল পেয়েছি তা আমি এক ক্লান্তিকর প্রক্রিয়া যা আমাকে পুনরাবৃত্তি রিবেস পরিচালনা করতে এবং একীভূত করতে বাধ্য করে ... এবং যতবারই আমি মাস্টারের কাছ থেকে আপডেট পেতে চাই ... তবে প্রস্তাবিত উপায়টি যা আমি স্বীকার করি তা অনেকটাই সহজ, মাস্টার কমিট অর্ডার / ইতিহাস না রেখে স্থানীয় শাখায় একক বিনা অনুমতিতে সমস্ত পরিবর্তন পেয়েছে all "আনতে" কীভাবে ব্যবহার করতে হবে এবং "পুল" ইত্যাদি ব্যবহার না করেই মাস্টারকে ট্র্যাক রাখতে হবে তার জন্য আরও ভাল পরামর্শ জানতে পেরে আমি আনন্দিত হব
ব্যবহারকারী 10556443

14

পরিস্থিতি : আমার স্থানীয় শাখায় কর্মরত, তবে আমি নামী উন্নয়ন শাখায় আপডেটগুলি রাখতে পছন্দ করি dev

সমাধান : সাধারণত, আমি করতে পছন্দ করি:

git fetch
git rebase origin/dev

15
সাধারণ অস্বীকৃতি দিয়ে যে রিবেসটি কেবল তখনই করা উচিত যদি স্থানীয় শাখা স্থানীয় হয়, অর্থাৎ এটি ইতিহাসের পুনর্লিখন হিসাবে কোথাও ঠেলাঠেলি করা হয়নি।
লকাস

8

এটা আমার জন্য কাজ করেছে। মাস্টার থেকে আমার শাখায় সর্বশেষ কোড পাওয়ার জন্য

git rebase origin/master


git fetch originপ্রথম ভুলবেন না ।
লেনোহ

3

পরিস্থিতি :

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

সমাধান :

git checkout master    
git pull --rebase    
git checkout Mybranch    
git rebase master
git push -f origin Mybranch
  • সমস্ত সমস্যার সমাধান না হওয়া অবধি পরিস্থিতি ও গিট ইঙ্গিত অনুসারে গিট মার্জেটুল & গিট রিবেস - কনটিনিউ, গিট রিবেস --স্কিপ, গিট অ্যাড-ইউ দিয়ে সমস্ত বিবাদ মীমাংসা করা দরকার

(জাজি কোহেনের সৌজন্যে, শেষ পর্যায়ে সংশোধন, সার্ভারে "-f" বাহিনীকে "ইতিহাসের আপডেট করার" উদ্দেশ্যে গিট ব্যবহার করে)

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

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