বর্তমান শাখা এবং মাস্টারের মধ্যে গিটের পার্থক্য রয়েছে তবে নিমজ্জিত মাস্টার কমিটগুলি অন্তর্ভুক্ত নয়


171

আমি একটি শাখার সমস্ত পরিবর্তনের একটি ভিন্নতা চাই যা এখনও মাস্টার হিসাবে মার্জ করা হয়নি is

আমি চেষ্টা করেছিলাম:

git diff master
git diff branch..master
git diff branch...master

যাইহোক, এই প্রতিটি ক্ষেত্রে পৃথকটিতে মাস্টারে এমন সামগ্রী রয়েছে যা এখনও আমার শাখায় একীভূত হয়নি।

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


9
আপনি দ্বিতীয় সংস্করণ প্রায় টুসকি, তাহলে আপনি যা চান তা পাবেন: git diff master..branch। আপনি git diff master..শাখায় থাকলে এটি সংক্ষিপ্ত করতে পারেন। r1..r2সিনট্যাক্স সংক্ষেপে হয় ^r1 r2যার মানে "আমাকে সবকিছু দেখায় যে থেকে বর্ষিত হয় r2এবং থেকে যোগাযোগ করা সম্ভব নয় r1"। git help gitrevisionsআপনি ব্যবহার করতে পারেন এমন বিভিন্ন সিনট্যাক্সের তথ্য রয়েছে।
জন স্মাকমিস্টার

1
এর ...বাক্য গঠন সম্পর্কে আরও পড়ার পরে আমি আমার উত্তরটি প্রসারিত করেছি git diff। আপনার মন্তব্যটি ভুল, @ জাজাকমিস্টার, কারণ বর্ণিত সংশোধন রেঞ্জগুলির কোনও যোগসূত্র gitrevisionsনেই git diff। ডিফ ইতিহাসের দুটি পয়েন্টের সাথে তুলনা করে, কোনও ব্যাপ্তির সাথে কাজ করতে পারে না।
প্লেক

আপনি সঠিক. আমি সর্বদা ভুলে যাই যা git diffঅন্য কমান্ডের চেয়ে আলাদাভাবে কাজ করে ... আমি হতাশাবোধ করি এমন একটি সত্য। :-(
জন Szakmeister

আপনি তুলনার আগে মাস্টারের স্থানীয় অনুলিপিটি আপডেট করেছেন তা নিশ্চিত করুন
জো

উত্তর:


232
git diff `git merge-base master branch`..branch

মার্জ বেস এমন এক বিন্দু যা থেকে অন্যদিকে branchসরানো হয়েছিল master

গিট ডিফ এটির জন্য একটি বিশেষ বাক্য গঠন সমর্থন করে:

git diff master...branch

আপনি অবশ্যই পক্ষগুলি অদলবদল করবেন না কারণ তখন আপনি অন্য শাখাটি পাবেন। আপনি কি জানতে চান কি পরিবর্তন হয়েছেbranch যেহেতু তা থেকে চলেনি master, না অন্য উপায় বৃত্তাকার।

আলগাভাবে সম্পর্কিত:


নোট করুন ..এবং... সিনট্যাক্সের অন্যান্য গিট সরঞ্জামগুলির মতো শব্দার্থক শব্দগুলি নেই। এটি উল্লিখিত অর্থ থেকে পৃথক man gitrevisions

উদ্ধৃতি man git-diff:

  • git diff [--options] <commit> <commit> [--] [<path>…]

    এটি দুটি স্বেচ্ছাচারিতার মধ্যে পরিবর্তনগুলি দেখতে <commit>

  • git diff [--options] <commit>..<commit> [--] [<path>…]

    এটি পূর্বের রূপের সমার্থক। যদি <commit>একদিকে বাদ দেওয়া হয় তবে এর HEADপরিবর্তে ব্যবহারের মতো একই প্রভাব ফেলবে ।

  • git diff [--options] <commit>...<commit> [--] [<path>…]

    এই ফর্মটি হ'ল <commit>উভয়ই সাধারণ পূর্বপুরুষ থেকে শুরু করে এবং দ্বিতীয়টিতে থাকা শাখায় পরিবর্তনগুলি দেখা <commit>। " git diff A...B" সমতুল্য " git diff $(git-merge-base A B) B"। আপনি যে কোনও একটি বাদ দিতে পারেন <commit>, যার HEADপরিবর্তে ব্যবহারের মতো একই প্রভাব রয়েছে ।

কেবলমাত্র যদি আপনি বাহ্যিক কিছু করে থাকেন তবে এটি অবশ্যই লক্ষ করা উচিত যে <commit>উপরের বর্ণনায় "" "চিহ্নিতকরণগুলি ব্যবহার করা শেষ দুটি রূপ ব্যতীত সমস্ত কিছুই যে কোনও হতে পারে <tree>

বানানের আরও সম্পূর্ণ তালিকার জন্য <commit>, "নির্ধারিত পর্যালোচনাগুলি" বিভাগটি দেখুন gitrevisions[7]। যাইহোক, "ডিফ" বলতে দুটি সমাপ্তি বিন্দুর তুলনা করতে হবে, রেঞ্জ নয়, এবং পরিসরের নোটেশন (" <commit>..<commit>" এবং " <commit>...<commit>") এর মধ্যে "স্পেসিফাইং রেঞ্জ" বিভাগে বর্ণিত একটি ব্যাপ্তি বোঝায় না gitrevisions[7]


আমার জন্য $ git diff master...branchউত্পাদিত fatal: ambiguous argument 'master...branch': unknown revision or path not in the working tree.- এটি একটি সংস্করণ নির্ভর আদেশ?
জোয়েল পেল্টেন

আসলে, আমি কেবল বুঝতে পেরেছিলাম যে "শাখা" অবশ্যই আপনার শাখার নাম হবে, আমি ভেবেছিলাম এটি বর্তমান শাখার একটি উল্লেখ
জোয়েল পেল্টেনেন

4
আপনি ঠিক বলেছেন, আমার উত্তরটি ডাকা ডাকা শাখার উপর নির্ভর করে branch। প্রশ্নটিতে ওপি যে নামটি বেছে নিয়েছিল তার সাথে আমি আঁকতে বেছে নিয়েছি। আপনি বর্তমান শাখা ব্যবহার করতে চান তাহলে, প্রতিস্থাপন branchসঙ্গে HEAD
প্লেকে

14
নোট করুন যে আপনি git diff master...শাখাটি নির্দিষ্ট করা এড়াতে ব্যবহার করতে পারেন (বর্তমানটি নেওয়া হবে)।
ভ্যাসিলিনভিকভ

1
devel@ ক্রিসগুয়েস্ট চেক আউট করার পরে কি আসল কমান্ডটি কাজ করে ? সম্ভবত, গিট আপনার জন্য চেকআউট করার সময় শাখা তৈরি করেছিল, একটি দূরবর্তী শাখার স্থানীয় অনুলিপি হিসাবে (সাধারণত origin/devel)। যদি ঘটনাটি ঘটে থাকে git diff origin/devel...bugfix/API-353-api-allows-database-access-whenতবে চেকআউটের আগেও কাজ করত।
পলেক

44

আমার জন্য যা কাজ করেছে তা এখানে:

git diff origin/master...

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


রেফারেন্সের জন্য, যদি আপনার এই পরিবর্তনগুলি অন্তর্ভুক্ত করে প্রতিশ্রুতিবদ্ধ রেফগুলির প্রয়োজন হয় তবে ব্যবহার করুন git cherry origin/master
জয়টিবান

এটি যদি আপনার প্রত্যাশা করেনি এমন একগুচ্ছ আবর্জনা দেখায় তবে আপনার কাছ masterথেকে কিছুটা কমিটসকে রিজাইজ করতে পারে।
মাইকেল - ক্লে শিরকি

21

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

git diff master...

এটি আপনার স্থানীয় কপিরিকে মাস্টার ব্যবহার করে।

একটি নির্দিষ্ট ফাইল ব্যবহার তুলনা করতে:

git diff master... filepath

আউটপুট উদাহরণ:

ব্যবহারের উদাহরণ

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