গিট-মার্জ - ড্রি-রান বিকল্প আছে?


724

আমি একটি প্রত্যন্ত শাখায় মার্জ করছি যাতে প্রচুর দ্বন্দ্ব হতে পারে। এটির দ্বন্দ্ব থাকবে কিনা তা আমি কীভাবে বলতে পারি?

আমি --dry-runঅন মত কিছু দেখতে পাচ্ছি না git-merge


5
যেহেতু গিতের সাথে শাখা প্রশস্ত করা সস্তা, তাই কেন একটি অনুলিপি চেকআউট করবেন না এবং তারপরে আপনার ড্রাই ড্রাই করার দরকার নেই? আপনি কেবল অনুলিপিটি পরে ফেলে দিতে পারেন।
আলেকজান্ডার মিলস

উত্তর:


811

পূর্বে উল্লিখিত হিসাবে, --no-commitপতাকাটিতে পাস করুন , তবে দ্রুত এগিয়ে যাওয়ার প্রতিশ্রুতি এড়াতে --no-ff, এ জাতীয় পাসও করুন:

$ git merge --no-commit --no-ff $BRANCH

মঞ্চস্থ পরিবর্তনগুলি পরীক্ষা করতে:

$ git diff --cached

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

$ git merge --abort

51
এটি দুর্দান্ত, তবে এখনও আপনার কাজের অনুলিপিটি সংশোধন করবে। আপনার রেপো একটি লাইভ ওয়েবসার্ভার হলে তারপর আপনি সংঘাত ফাইল ভজনা হতে পারে।
dave1010

21
কাজের অনুলিপিটিকে প্রভাবিত না করে আপনি সত্যিকার অর্থে মার্জ করতে পারবেন না।
মিপাদি

55
সত্য, তবে এর মতো কিছু git merge --only-if-there-wont-be-any-conflictsবা git diff --show-conflicts <commit>সত্যই কার্যকর be লজ্জা এটি এখনও সম্ভব নয়, বা আমি কিছু মিস করছি?
dave1010

343
@ dave1010 আপনার কখনই কোনও লাইভ ওয়েব সার্ভারে মার্জগুলি পরিচালনা করা উচিত নয় !!! আপনার বিকাশের বাক্সটি এটাই! "প্রোড" শাখাটি ঠিক করুন এবং তারপরে এটি সত্যিকারের ওয়েব সার্ভারে চাপ দিন।
jpswain

52
আপনি যদি লাইভ / প্রোডাকশন সার্ভারে কাজ করেন তবে আপনি আর কিছুই করতে চান না git pull --ff-only!
চোরমাস্টার

237

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

  1. আপনার সংগ্রহস্থলে রিমোট আনুন। উদাহরণ স্বরূপ: git fetch origin master
  2. গিট মার্জ-বেস চালান: git merge-base FETCH_HEAD master
  3. গিট মার্জ-ট্রি চালান: git merge-tree mergebase master FETCH_HEAD( মার্জব্যাস হেক্সাডেসিমাল আইডি যা আগের ধাপে মুদ্রিত বেসটি মুদ্রিত হয়)

এখন ধরা যাক আপনি আপনার স্থানীয় মাস্টারের সাথে রিমোট মাস্টারটি মার্জ করতে চান তবে আপনি যে কোনও শাখা ব্যবহার করতে পারেন। git merge-treeমেমরিতে একীকরণ কার্যকর করবে এবং ফলাফলটিকে স্ট্যান্ডার্ড আউটপুটে মুদ্রণ করবে। প্যাটার্ন জন্য গ্রেপ <<বা >>। অথবা আপনি কোনও ফাইলের আউটপুট মুদ্রণ করতে পারেন এবং এটি পরীক্ষা করতে পারেন। যদি আপনি 'উভয় পরিবর্তিত' দিয়ে শুরু করে কোনও লাইন পান তবে সম্ভবত সম্ভবত কোনও দ্বন্দ্ব হবে।


41
এই উত্তরটি আইএমএইচও, আন্ডাররেটেড, কারণ এটি কার্যকরী অনুলিপি বা সূচি স্পর্শ না করে একটি পরিষ্কার সমাধান।
স্কুবার্থ

23
বিটিডাব্লু, 2 এবং 3 পদক্ষেপগুলি একটি ধাপে একত্রীকরণ করা যায়, লিনাক্স কনসোলের ব্যাকটিক অপারেটর ব্যবহার করে, যা এর git merge-tree `git merge-base FETCH_HEAD master` FETCH_HEAD master
স্থানগুলির

15
.Gitconfig এ [ওরফে] যুক্ত করুন: শুকনো = "! F () it গিট মার্জ-ট্রি` গিট মার্জ-বেস $ 2 $ 1` $ 2 $ 1;}; এফ "# মাস্টারে দেবের সংযুক্তি কীভাবে যাবে তা পরীক্ষা করুন: গিট শুকনো দেব মাস্টার
নোয়েল

8
আমার নতুন ফেভ জিআইটি লাইন: git merge-tree `git merge-base clieop master` clieop master | grep -A3 "changed in both"কেবল দুর্দান্ত! +100
রুডি

4
এটি পরীক্ষায় আমি উভয় শাখা একই ফাইলে সংশোধন করে যেখানে উভয় শাখা একই ফাইলে পরিবর্তিত হয় সেখানে 'উভয় পরিবর্তিত' ফ্ল্যাগগুলির জন্য গ্রেপিংয়ের বিষয়টি দেখতে পেলাম, এমনকি যদি তারা মার্জ সংঘাতের ফলাফল না দেয়। কেবল প্রকৃত দ্বন্দ্ব শনাক্ত করার জন্য আমি এই জাতীয় সংঘাতের চিহ্নআপের জন্য গ্রেপ করা দরকার বলে মনে করেছি: +<<<<<<< .ourসুতরাং আমি গ্রেপ এক্সপ্রেশনটি ব্যবহার করিgrep -q '^+<* \.our$'
গাই

55

এটির জন্য আমার সাধারণ উদ্দীপনা সমাধানটি হ'ল:

  1. একটি "প্রাক-মাস্টার" শাখা তৈরি করুন (অবশ্যই মাস্টার থেকে)

  2. আপনি যা চান তা এই প্রাক-মাস্টারের মধ্যে মার্জ করুন।
    তারপরে আপনি দেখতে পেলেন যে কীভাবে সংযোজনটি মাস্টারকে স্পর্শ না করেই ঘটেছে।

    • প্রাক-মাস্টারকে মাস্টার OR এ মার্জ করুন
    • সমস্ত ওয়ানব-প্রকাশিত শাখাগুলিকে মাস্টার হিসাবে মার্জ করুন

যাইহোক, আমি @ কমলা 80 এর পরামর্শ অনুসরণ করব।


5
আমি @akostajti সমাধানটি পছন্দ করি তবে এটি আর একটি আন্ডাররেটেড বিকল্প। প্রকৃতপক্ষে আমি প্রতিরক্ষামূলক হতে এবং একটি নতুন টেম্প শাখা তৈরি করতে পছন্দ করি (অবশ্যই আমি যখন বিরোধগুলির প্রত্যাশা করি, অন্যথায় এটি একটি ওভারকিল হবে), এবং যদি কিছু ভুল হয়ে যায় তবে কেবল এটি মুছুন।
jakub.g

1
dunno যদি এটি "নোংরা" সমাধান হয় বা না হয় তবে এটি সত্যিই কাজটি করে। আমি এটা পছন্দ করি! (Y)
সারা 14

3
এটি হ'ল গ্রহণযোগ্য সমাধান, ইমো। এটি দ্রুত, সহজ, নিরাপদ, বিপরীতমুখী, স্বজ্ঞাত এবং যতক্ষণ না আপনি শুরুর আগে কোনও আপত্তিজনক পরিবর্তন নেই, তার কোনও পার্শ্ব প্রতিক্রিয়া থাকবে না।
বব রায়

3
এই সমাধানটি আপনাকে জানায় যে গিট কীভাবে কাজ করে। শাখাটি কেবলমাত্র পয়েন্টার এবং আপনি কেবলমাত্র একটি বাজে পয়েন্টার তৈরি করছেন। আপনার খারাপ অনুভূতি রয়েছে যে আপনি কোনওভাবে আপনার শাখার মার্জিংয়ে আঘাত করতে পারেন তবে আপনি পারবেন না। আপনি যদি সর্বদা git merge --abortবিবাদ সৃষ্টি করতে পারেন, git reset --hard HEAD~1যদি সেখানে মার্জ বা মেশানো থাকে তবে আপনি সর্বদা করতে পারেন git reset --hard origin/master। অন্য একটি শাখা তৈরি করা আপনাকে সুরক্ষার একটি অনুভূতি দেয় তবে আপনি কীভাবে গিটটি কাজ করেন তা শিখলে এটি বুঝতে হবে এটি ভুলভ্রান্ত ভয়। যখন উদ্বেগটি ওয়ার্কিং কপিটি পরিবর্তন না করার বিষয়ে হয় তখন এটি কোনও সমাধান দেয় না।
থিবল্ট ডি

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

47

গিটের সাথে একীভূত হওয়াটিকে পূর্বাবস্থায় ফেলা খুব সহজ আপনার শুকনো রান সম্পর্কে চিন্তা করাও উচিত নয়:

$ git pull $REMOTE $BRANCH
# uh oh, that wasn't right
$ git reset --hard ORIG_HEAD
# all is right with the world

সম্পাদনা করুন: নীচের মন্তব্যে যেমন উল্লেখ করা হয়েছে, আপনার যদি আপনার কার্যকারী ডিরেক্টরি বা মঞ্চের ক্ষেত্রের পরিবর্তন হয় তবে আপনি সম্ভবত উপরের কাজটি করার আগে সেগুলি স্ট্যাশ করতে চান (অন্যথায় তারা git resetউপরের অনুসরণ করে অদৃশ্য হয়ে যাবে )


7
মার্জটি দ্রুত-ফরওয়ার্ড হবে কিনা তা যাচাই করে নেওয়া (এফএফ) git branch --contains HEADসরাসরি বা আরও সরাসরি তালিকা পরীক্ষা করার বিষয় , কেবল ব্যবহার করুনgit merge --ff-only
ব্রায়ান ফিলিপস

7
গিট রিসেট - গার্ডের কোনও কিছু নেই-ব্যাকআউট আউট-অফ-তথ্য-মুছে ফেলার একটি হ'ল তাই চরম সতর্কতার সাথে ব্যবহার করা উচিত। যেমন, -1
Kzqai

8
@ থাখলক এখনও অবরুদ্ধ আছে।
কিসাকি

3
--dry-run"মার্জটি দ্রুত-এগিয়ে হবে কিনা তা কেবল খতিয়ে দেখেনি"। এটি একত্রীকরণের সঠিক আউটপুটটি ফিরিয়ে আনবে: ফাইল, দ্বন্দ্ব ইত্যাদি এফএফ হবে কিনা তা সত্যিই আকর্ষণীয় নয়, তাই না?
রুডি

3
কেমন git stash; git reset --hard ? @ ব্রায়ানফিলিপস
কোড

41

আমি এটি করার জন্য একটি উপনাম তৈরি করেছি এবং মনোমুগ্ধকর মতো কাজ করি, আমি এটি করি:

 git config --global alias.mergetest '!f(){ git merge --no-commit --no-ff "$1"; git merge --abort; echo "Merge aborted"; };f '

এখন আমি শুধু কল

git mergetest <branchname>

কোনও দ্বন্দ্ব আছে কিনা তা খুঁজে বের করতে।


উজ্জ্বল! আমি এই রাখছি।
qbert65536

28

রিমোট শাখার তুলনায় আপনার বর্তমান শাখার থেকে কেবল আলাদা করুন, এটি আপনাকে বলবে যে আপনি যখন টান / সংহত করবেন তখন কী পরিবর্তন হতে চলেছে।

#see diff between current master and remote branch
git diff master origin/master

1
আকর্ষণীয় ধারণা। আমি কীভাবে সেই আউটপুটটি দেখব এবং একীভূতকরণটি কাজ করছে কিনা তা নির্ধারণ করব?
ম্যাট্রিক্সফ্রোগ

6
এটি কোনও বিবাদ সৃষ্টি হয়েছে কিনা তা আপনাকে জানায় না ... তবে আপনি যদি টান / সংহত করে থাকেন তবে কী ঘটবে সে সম্পর্কে এটি একটি সাধারণ ধারণা দেয়।
তিমাহ

10
এটি আপনাকে কেবল দুটি শাখার মধ্যে পার্থক্য জানাবে, এটি মার্জটির ফলাফল কী হবে তা আপনাকে জানায় না। এটি একটি গুরুত্বপূর্ণ পার্থক্য কারণ একত্রে উইল করা কিছু ক্ষেত্রে কখন প্রতিশ্রুতিবদ্ধ ছিল তার উপর নির্ভর করে বিভিন্ন শাখা থেকে স্বয়ংক্রিয়ভাবে পরিবর্তন করে। সুতরাং প্রকৃতপক্ষে, একটি আলাদা করার ফলে আপনি ভাবতে পারেন যে আপনার কিছু পরিবর্তনগুলি আবার বাস্তবে পরিণত হবে যখন বাস্তবে, মার্জ প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে পুরানোগুলির চেয়ে নতুন পরিবর্তনগুলি নেবে। আশা করি তা বোধগম্য হয়।
মার্ককিজাদা

3
@ মীরথলব এর মন্তব্যে গড়ে তুলতে, যদি কেউ আগে "আমাদের" মার্জ কৌশল (বা অন্য কোনও ম্যানুয়াল মার্জ ফিক্সআপস) এর সাথে একীভূত করে তবে ডিফ এবং সংযুক্তির মধ্যে একটি উল্লেখযোগ্য পার্থক্য থাকবে; ডিফটি আপনাকে এমন পার্থক্যও দেখাবে যা ইতিমধ্যে "সংহত" হিসাবে গণনা করা হয়েছে।
টাও 14

21

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

উদাহরণস্বরূপ, কল্পনা করুন আপনি "মাস্টার-এক্স" নামের একটি শাখাটিকে আপনার মাস্টার শাখায় মার্জ করতে চান

git request-pull master origin feature-x

কী ঘটবে তার সংক্ষিপ্তসার (কিছু না করে) দেখাবে:

The following changes since commit fc01dde318:
    Layout updates (2015-06-25 11:00:47 +0200)
are available in the git repository at:
    http://fakeurl.com/myrepo.git/ feature-x
for you to fetch changes up to 841d3b41ad:
----------------------------------------------------------------
john (2):
    Adding some layout
    Refactoring
ioserver.js            |   8 +++---
package.json           |   7 +++++-
server.js              |   4 +--
layout/ldkdsd.js       | 277 +++++++++++++++++++++++++++++++++++++
4 files changed, 289 insertions(+), 7 deletions(-)
create mode 100644 layout/ldkdsd.js

আপনি যদি -pপ্যারামিটারটি যুক্ত করেন , আপনি পুরো প্যাচ পাঠ্যও পাবেন, ঠিক যেমন আপনি প্রতিটি পরিবর্তিত ফাইলটিতে গিট ডিফ করছেন।


3
কমান্ড-লাইন বিকল্পগুলিতে কী masterএবং কী যুক্ত করে আপনি এটিকে কিছুটা পরিষ্কার করতে পারেন origin, এবং আমি যদি স্থানীয় হিসাবে উদাহরণস্বরূপ থাকি branch1এবং request-pullস্থানীয় বৈশিষ্ট্য শাখায় একটি করতে চাই তবে কী হবে branch2? আমার কি এখনও দরকার origin? অবশ্যই, একটি সর্বদা ডকুমেন্টেশন পড়তে পারেন।
Ela782

দুঃখজনকভাবে এই কমান্ডটি কেবল তখনই কাজ করে যদি রেভ # 2 একটি শাখার নাম, এটি হ্যাশগুলির জন্য কাজ করে না: /
জারেড গ্রুব

20

আমি অবাক হয়েছি এখনও কেউ প্যাচগুলি ব্যবহার করার পরামর্শ দেয়নি।

আপনার কাছ থেকে একটি একত্রীকরণ পরীক্ষা করতে চাই বলুন your_branchমধ্যে master(আমি তোমাকে অভিমানী করছি masterচেক আউট):

$ git diff master your_branch > your_branch.patch
$ git apply --check your_branch.patch
$ rm your_branch.patch

কৌতুক করা উচিত।

আপনি যদি ত্রুটি পেতে

error: patch failed: test.txt:1
error: test.txt: patch does not apply

এর অর্থ এই যে প্যাচটি সফল হয়নি এবং একীভূত হওয়ার ফলে বিরোধ সৃষ্টি হবে। কোনও আউটপুট মানে প্যাচ পরিষ্কার নেই এবং আপনি সহজেই শাখাটি মার্জ করতে সক্ষম হবেন


নোট করুন যে এটি আসলে আপনার কার্যকরী গাছকে পরিবর্তন করবে না (অবশ্যই প্যাচ ফাইল তৈরি করা বাদ দিয়ে আপনি পরে নিরাপদে মুছতে পারেন)। গিট-প্রয়োগ নথি থেকে:

--check
    Instead of applying the patch, see if the patch is applicable to the
    current working tree and/or the index file and detects errors. Turns
    off "apply".

আমার চেয়ে গিটের সাথে আরও স্মার্ট / আরও অভিজ্ঞ যে কোনও ব্যক্তিকে নোট করুন: দয়া করে এখানে আমাকে ভুল করে থাকলে আমাকে জানান এবং এই পদ্ধতিটি নিয়মিত সংযোজনের চেয়ে আলাদা আচরণ দেখায় behavior এটি আশ্চর্যজনক বলে মনে হয় যে 8+ বছরে এই প্রশ্নটির অস্তিত্ব নেই, এটি আপাতদৃষ্টিতে সুস্পষ্ট সমাধানের পরামর্শ দিতে পারে।


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

1
একটি অস্থায়ী প্যাচ ফাইল তৈরি ছাড়া একটি খাটো উপায়: git diff master your_branch | git apply --check
ks1322

9

এটি আকর্ষণীয় হতে পারে: ডকুমেন্টেশন থেকে:

যদি আপনি এমন একীকরণের চেষ্টা করেন যা জটিল দ্বন্দ্বের সৃষ্টি করে এবং আবার শুরু করতে চায়, আপনি গিট মার্জ --abort দিয়ে পুনরুদ্ধার করতে পারেন ।

তবে আপনি এটি নিষ্পাপ (তবে ধীর) উপায়টিও করতে পারেন:

rm -Rf /tmp/repository
cp -r repository /tmp/
cd /tmp/repository
git merge ...
...if successful, do the real merge. :)

(দ্রষ্টব্য: এটি কেবল / টিএমপি-তে ক্লোনিংয়ের কাজ করবে না, যাতে আপনার অনুলিপি পরিবর্তনগুলি দ্বন্দ্ব করবে না তা নিশ্চিত করার জন্য আপনার একটি অনুলিপি প্রয়োজন))


2
আপনার যা যা দরকার তা হ'ল ... :) +1
কায়সার

ক্লিন কপি সঙ্গে প্রাপ্ত করা যাবে cp -r repository/.git /tmp/repository/.git, cd /tmp/repository, git reset --hard, git add --all, git reset --hard(ভাল পরিমাপ জন্য), git status(চেক করার জন্য যে এটা পরিষ্কার এর)।
এডিটিসি

8

আমি সচেতন যে এটি একটি পুরানো প্রশ্ন, তবে গুগল অনুসন্ধানে এটিই প্রথম উপস্থিত।

মার্জ করার সময় গিট একটি --ff-only বিকল্পটি প্রবর্তন করে।

থেকে: http://git-scm.com/docs/git- विसর


কেবল---ff

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

এটি করার ফলে মার্জ এবং দ্রুত-ফরওয়ার্ডের চেষ্টা করা হবে এবং এটি যদি এটি বন্ধ না করে এবং আপনাকে দ্রুত-ফরোয়ার্ড সম্পাদন করা যায় না এমন অনুরোধ জানায় তবে আপনার কার্যকারী শাখাটি অদৃশ্য রাখে। যদি এটি দ্রুত-এগিয়ে যেতে পারে তবে তা আপনার কার্যকারী শাখায় মার্জটি সম্পাদন করবে। এই বিকল্পটি উপলব্ধ git pull। সুতরাং, আপনি নিম্নলিখিত করতে পারে:

git pull --ff-only origin branchA #See if you can pull down and merge branchA

git merge --ff-only branchA branchB #See if you can merge branchA into branchB

1
এটি যদি দ্রুত ফরোয়ার্ড দিয়ে সম্পন্ন করা যায় তবে এটি একীভূত করবে যা মূল প্রশ্নে আমি যা চাইছিলাম তা নয়। আমি মনে করি গ্রহণযোগ্য উত্তরের অন্য অর্ধেক এটি ঠিক করেছে।
অটো

সত্যই যদিও, অভিনব গিট আমাকে এই ধরণের জিনিসটির জন্য প্রয়োজনীয়তাটি প্ররোচিত করে।
অটো

2
এটি আসলে একরকম নয়। শূন্য-স্থিতি স্থিতির সাথে প্রস্থান করানো কারণ একীভূতকে দ্রুত-ফরোয়ার্ড হিসাবে সমাধান করা যায় না এর অর্থ বিরোধ নেই । এর অর্থ হ'ল ইতিহাসটি অন্যদিকে চলে গেছে এবং একীকরণের অঙ্গীকার প্রয়োজনীয়।
এডিটিসি

7

মাস্টার শাখা থেকে কোনও বৈশিষ্ট্য শাখায় কী পরিবর্তন হয়েছে তা দেখতে আমি গিট লগ ব্যবহার করি

git log does_this_branch..contain_this_branch_changes

উদাহরণস্বরূপ - কোনও বৈশিষ্ট্য শাখায় কমিটগুলি কী রয়েছে তা দেখার জন্য যা মাস্টারের সাথে একীভূত / না হয়েছে:

git log master..feature_branch

3

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


2

আমার সমাধানটি পিছনে মার্জ করা।

আপনার শাখাটি দূরবর্তী "টার্গেট" শাখায় মার্জ করার পরিবর্তে branch শাখাটি আপনার মধ্যে মার্জ করুন।

git checkout my-branch
git merge origin/target-branch

আপনি দেখতে পাবেন যে কোনও বিবাদ রয়েছে কিনা এবং কীভাবে সেগুলি সমাধান করবেন সে বিষয়ে পরিকল্পনা করতে পারেন।

এর পরে আপনি গিটের মাধ্যমে মার্জটি বাতিল করতে পারেন merge --abort, বা (যদি কোনও বিবাদ না ঘটে এবং মার্জটি ঘটে থাকে) এর মাধ্যমে পূর্বের প্রতিশ্রুতিতে ফিরে যেতে পারেনgit reset --hard HEAD~1


-2

আপনার কার্যকরী অনুলিপিটির একটি অস্থায়ী অনুলিপি তৈরি করুন, তারপরে এতে একীভূত করুন এবং দুটির মধ্যে আলাদা করুন।

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