বাস্তবে প্রথমে মার্জ না করে কীভাবে মার্জটি পরীক্ষা করা যায়


165

git mergeবর্তমান শাখা এবং মাস্টার দুটি শাখার মধ্যে কোনও অনুকরণের কোনও উপায় আছে তবে কোনও পরিবর্তন না করেই কি?

আমার যখন প্রায়শই তৈরি করতে হয় তখন আমার প্রায়ই দ্বন্দ্ব হয় git merge। প্রথমে একত্রীকরণের কোনও উপায় আছে কি?



উত্তর:


131

আপনি একত্রীকরণের চেষ্টা না করা পর্যন্ত যা ঘটবে তা অনুকরণ করার কোনও উপায় আছে বলে আমি মনে করি না। তবে, আপনি যদি নিশ্চিত হন যে git statusআপনি মার্জ করার আগে আউটপুট ফাঁকা আছে, কেবলমাত্র এগিয়ে গিয়ে চেষ্টা করে নেওয়া বেশ নিরাপদ। যদি আপনি দ্বন্দ্ব পান তবে আপনি তত্ক্ষণাত সেই রাজ্যে ফিরে যেতে পারেন যার সাথে আপনি আগে ছিলেন:

git reset --merge

গিট 1.7.4 যেহেতু, আপনি এইভাবে মার্জটি বাতিল করতে পারেন:

git merge --abort

( প্রতিশ্রুতিবদ্ধ বার্তায় যে বিকল্পটি যুক্ত করেছে তা ব্যাখ্যা করে , এটি ধারাবাহিকতার জন্য যুক্ত করা হয়েছিল git rebase --abortএবং আরও অনেক কিছু))


4
@ অ্যাম্বারের উত্তর ঠিক কীভাবে জিজ্ঞাসা করা হচ্ছে যে কীভাবে 'সংযুক্তির অনুকরণ করা যায়' তার উত্তর দেওয়া হচ্ছে। --no-commitআমার মতে ব্যবহার করা অনেক সহজ
সামিরাহমেড

14
@ সামিরাহমেদ: @ অ্যাম্বার প্রশ্নের উত্তরটি আরও আক্ষরিক অর্থে জবাব দিলেন, নিশ্চিত, যদিও --no-commitআপনি এখনও সূচক এবং কার্যনির্বাহী গাছটি পরিবর্তন করছেন, যা হ'ল "কোনও পরিবর্তন না করেই" নয় :) :) আমার বক্তব্যটি যখন মানুষ এই ধরণের জিজ্ঞাসা করে প্রশ্ন, এটি সাধারণত কারণ তারা জানে না যে মার্জটি কীভাবে ঘটবে তা দেখার সর্বোত্তম উপায় হ'ল কেবল মার্জটি চেষ্টা করা , কারণ তারা আগে যে অবস্থায় ছিল সে দেশে ফিরে আসার পক্ষে কতটা সহজ তা তারা সচেতন ছিল না যদি সমস্যা দেখা দেয়।
মার্ক লংগায়ার

2
আমি জানি না এটি গীটের আরও সাম্প্রতিক সংস্করণে যুক্ত হয়েছে কিনা, তবে ডক্সে (1.8.4) এটি " উপস্থিত থাকাকালীন git merge --abortসমতুল্য " বলে উল্লেখ করেছে, তাই মনে রাখা যা সহজ) :)git reset --mergeMERGE_HEAD
স্যামুয়েল মেচাম

@ সামুয়েলম্যাচাম: এটি উল্লেখ করার জন্য ধন্যবাদ - এটি 1.7.4-এ প্রবর্তিত হয়েছিল। আমি উত্তর দিয়ে আপডেট করেছি। ধন্যবাদ!
লংগায়ার

এই পরামর্শটি আমার পক্ষে কিছুই করেনি, গিট ১.৯.৪।
জাঙ্গোফান

137

আপনি git merge --no-commitমার্জটি বাস্তবে প্রতিশ্রুত হওয়া থেকে রোধ করতে ব্যবহার করতে পারেন এবং আপনি যদি মার্জটি কীভাবে কার্যকর হয় তা পছন্দ না করেন তবে কেবলমাত্র মূল শিরোনামে পুনরায় সেট করুন।

যদি আপনি স্পষ্টতই মার্জটিকে চূড়ান্ত করতে না চান, এমনকি যদি এটি দ্রুত-অগ্রসর হয় (এবং এর মধ্যে সংজ্ঞা অনুসারে কোনও বিরোধ নেই), আপনিও যুক্ত করতে পারেন --no-ff


আমি মনে করি না যে git merge --abortবিদ্যমান আছে - সম্ভবত আপনি মানে git reset --merge?
লংগায়ারকে

নাহ, আমি শুধু যে অসদৃশ ভুলে গেছি rebaseনা আছে --abortজন্য git merge
অ্যাম্বার

7
আমি নিক্ষেপ চাই --no-ffখুব। একটি ff সংঘটন থেকে মার্জ রাখা।
অ্যান্ডি

1
@ অ্যান্ডি --no-ffএখানে বেশ বাধ্যতামূলক, যেহেতু --no-commitদ্রুত-অগ্রগামী পরিবর্তনগুলি থামায় না।
জ্যাকার

1
@Anant আনন্দ গুপ্ত - এই একটি ভাল কৌতুক কিন্তু এটা হওয়া উচিত: Git কনফিগ --global alias.tm "একত্রীকরণ --no-FF --no কমিট"
pasx

109

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

git checkout master
git checkout -b trial_merge
git merge topic_branch

মার্জ শেষ করার পরে, মাস্টার থেকে একীভূত পরিবর্তনটি দেখতে সহজ

git diff master

হয়ে গেলে, কেবলমাত্র ট্রায়াল_ডর্ম শাখাটি মুছুন

git checkout master
git branch -D trial_merge

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


4
আপনি git checkout --detachযা কিছু করতে এবং পরীক্ষা করতে পারেন। পরে, আপনি যদি নিজের পরিবর্তনগুলি রাখতে চান তবে করুন git checkout -b new_branch। এবং যদি আপনি আপনার পরিবর্তনগুলি ফেলে দিতে চান তবে আপনার যে কোনও শাখা ( git checkout master) চান চেকআউট করুন ।
শায়ান তোকারাই

যদি topic_branchবিশাল হয় (সম্ভবত আপনি যদি এই প্রশ্নে প্রথম স্থানে থাকেন diff masterতবে সম্ভবত ) যদি মার্জটি বিরোধ সৃষ্টি করে তবে আউটপুট আপনার চোখের বলের কাছে সম্ভবত খুব বড়।
ক্রিসেন্ট ফ্রেশ

আমি অবশ্যই এটি অনেক পছন্দ করি ... নিরাপদ এবং সাধারণ।
লিও

4

আমি ব্যবহার করি :

git merge --ff-only

ডকুমেন্টেশন অনুযায়ী :

একত্রে-শূন্য স্থিতির সাথে একত্রীকরণ এবং প্রস্থান করতে অস্বীকার করুন যদি না বর্তমানের হেড ইতিমধ্যে আপ টু ডেট থাকে বা একীভূতিকে দ্রুত-অগ্রবর্তী হিসাবে সমাধান করা না যায়।

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


4

আমি git merge --abortসম্প্রতি ব্যবহার করতে সক্ষম হয়েছি । তবে একত্রীকরণের বিরোধ থাকলেই এটি ব্যবহার করা যেতে পারে। যদি আপনি নিশ্চিত হন যে আপনি প্রতিশ্রুতিবদ্ধ করতে চাইবেন না, তবে উপরে বর্ণিত অন্যান্য পদ্ধতিগুলি ব্যবহার করুন।


1
উপরে উল্লিখিত অন্যান্য কোন পদ্ধতি? তারা সবাই উল্লেখ git merge --abort। আপনি যে উত্তরটি উল্লেখ করছেন সে উত্তর কে লিখেছেন তা উল্লেখ করে আপনার ভবিষ্যতের প্রমাণ দেওয়া উচিত।
মাইকেল ফুলটন

3

কেন কেবল একটি নিক্ষেপ শাখা (গিট চেকআউট-বি) তৈরি করবেন না এবং সেখানে একটি পরীক্ষা একীভূত করবেন না?


1
আপনি যা পরামর্শ দিচ্ছেন তা হ'ল ইয়ান উত্তরটি সম্পূর্ণরূপে প্রকাশ করেছে :)
tzot

0

আমি ঠিক জানি না এটি আপনার ক্ষেত্রে কিনা তবে আপনার প্রশ্নটি আমাকে মনে রাখে যে মাঝে মাঝে আমি কোনও বৈশিষ্ট্য শুরু করি, আমি বেশ কয়েকদিন ধরে প্রতিশ্রুতিবদ্ধ করি এবং আমি এর সাথে বিকাশটি বহুবার মার্জ করি।

এই মুহুর্তে আমি আমার পরিবর্তিত সঠিক ফাইলগুলির নিয়ন্ত্রণ হারিয়ে ফেলেছি এবং আমার বৈশিষ্ট্যটি বন্ধ হয়ে যাওয়ার পরে এবং আমার কোডটি বিকাশ করতে গেলে আমি কেবল তখনই তা জানব।

এই ক্ষেত্রে, আপনি কী পরিবর্তনগুলি (মার্জগুলি থেকে অন্য নয়) কী করেছেন তা জানার একটি ভাল উপায় সোর্সট্রি ব্যবহার করছে।

আপনার অবশ্যই বেস শাখায় ডান বোতামটি ক্লিক করে নির্বাচন করুন Diff Against Current:

দুটি শাখার মধ্যে পার্থক্য জানতে সোর্সট্রি এর বৈশিষ্ট্য

তারপরে সোর্সট্রি আপনাকে সমস্ত সংশোধনী প্রদর্শন করবে যা আপনি আপনার শাখাটি বেস শাখায় মার্জ করলে মার্জ হবে।

ফলাফল

অবশ্যই, এটি আপনাকে দ্বন্দ্বগুলি দেখাবে না, তবে এটি মার্জগুলিতে একটি দরকারী সরঞ্জাম।

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