গিট ডিফ কমিট রেঞ্জের ডাবল-ডট “..” এবং ট্রিপল-ডট “…” এর মধ্যে পার্থক্য কী?


188

নিম্নলিখিত কমান্ডগুলির মধ্যে পার্থক্যগুলি কি ?:

git diff foo master   # a 
git diff foo..master  # b
git diff foo...master # c

এটি সম্পর্কে পৃথক ম্যানুয়াল আলোচনা:

শাখা তুলনা

$ git diff topic master    <1>
$ git diff topic..master   <2>
$ git diff topic...master  <3>
  1. বিষয়ের টিপস এবং মাস্টার শাখার মধ্যে পরিবর্তনসমূহ।
  2. উপরের মতই.
  3. টপিক শাখাটি যখন এটি বন্ধ করা শুরু হয়েছিল তখন থেকে মাস্টার শাখায় যে পরিবর্তনগুলি ঘটেছিল।

তবে আমার কাছে সম্পূর্ণ পরিষ্কার নয়।


যদিও প্রশ্নটি সদৃশ নয়, এই উত্তরটি গ্রাফিকভাবে এবং এর অর্থ ..এবং এর ...ভিতরে git diffএবং এর বিভিন্ন অর্থ বোঝায় git log
লংগায়ার

উত্তর:


333

যেহেতু আমি ইতিমধ্যে এই মূর্তিগুলো নির্মিত চাই, আমি ভেবেছিলাম এটা তাদের অন্য উত্তর ব্যবহারের মূল্য হতে পারে, যদিও এর মধ্যে পার্থক্য বর্ণনা ..(ডট ডট) এবং ...(ডট ডট ডট) মূলত মধ্যে হিসাবে একই manojlds এর উত্তর

কমান্ডটি git diffসাধারণত - প্রতিশ্রুতিবদ্ধ গ্রাফের ঠিক দুটি পয়েন্টের মধ্যে আপনাকে গাছের রাজ্যের মধ্যে পার্থক্য দেখায়। ..এবং ...এ স্বরলিপি git diffনিম্নলিখিত অর্থ আছে:

গিট ডিফের জন্য প্রতিশ্রুতিবদ্ধকরণের বিভিন্ন উপায়ের উদাহরণ

অন্য কথায়, git diff foo..barঠিক যেমন একই git diff foo bar; উভয় আপনি দুটি শাখা এর টিপস মধ্যে পার্থক্য দেখাতে হবে fooএবং bar। অন্যদিকে, git diff foo...barআপনাকে দুটি শাখার "মার্জ বেস" এবং এর টিপের মধ্যে পার্থক্য দেখাবে bar। "মার্জ বেস" সাধারণত two দুটি শাখার মধ্যে সর্বশেষ সাধারণ অঙ্গীকার হিসাবে কাজ করে, সুতরাং এই কমান্ডটি আপনার সময়ে কাজ করা পরিবর্তনগুলি আপনাকে দেখাবে এবং মধ্যবর্তী সময়ে barকরা সমস্ত কিছু উপেক্ষা করে foo

এগুলির মধ্যে ..এবং ...চিহ্নগুলি সম্পর্কে আপনার কেবল এতগুলি জানা দরকার git diff। যাহোক...


... এখানে বিভ্রান্তির একটি সাধারণ উত্স হ'ল ..এবং ...যখন কোনও কমান্ডে ব্যবহার করা হয় তখন তারা বিভিন্নভাবে বোঝায় git logযেমন একটি বা একাধিক যুক্তি হিসাবে কমিটের সেটকে প্রত্যাশা করে। (এই কমান্ডগুলি git rev-listতাদের যুক্তি থেকে কমিটের একটি তালিকা পার্স করে শেষ করে up )

অর্থ .....জন্য git logনীচের হিসাবে গ্রাফিক্যালি দেখানো যেতে পারে:

গিট লগের জন্য কমিটের সীমা নির্দিষ্ট করার বিভিন্ন উপায়ের একটি চিত্র ration

সুতরাং, git rev-list foo..barআপনাকে শাখায় barএমন সমস্ত কিছুই দেখায় যা শাখায় নেই foo। অন্যদিকে, git rev-list foo...barআপনি শো সব করে যে উভয় foo বা bar , কিন্তু উভয় । তৃতীয় চিত্রটি কেবলমাত্র দেখায় যে আপনি দুটি শাখা তালিকাভুক্ত করলে আপনি যে কমিটগুলি উভয়ই উভয় বা উভয়ের মধ্যে রয়েছে তা পেয়ে যান।

ঠিক আছে, আমি দেখতে পেয়েছি যে কিছুটা বিভ্রান্তিকর, যাইহোক, এবং আমি মনে করি যে প্রতিশ্রুতিবদ্ধ গ্রাফ ডায়াগ্রামগুলি সহায়তা করে :)

¹ আমি কেবল তখনই "সাধারণত" বলি যেহেতু মার্জ সংঘাতগুলি সমাধান করার সময়, উদাহরণস্বরূপ, git diffআপনাকে একটি ত্রি-মুখী মার্জ দেখানো হবে।


1
আমি তোমার চিত্রগুলি পছন্দ করি আমি কিছুক্ষণ আগে আমার নিজের সাথেও এসেছি । আমার নিজস্ব git diffডায়াগ্রামগুলির জন্য কিছু ধারণা আছে যা আমি পরে করব।

34
কেউ খেয়াল করেছেন? প্রভাব ..এবং ...অনুভূতি বিপরীত মধ্যে git diff(তুলনায় git rev-list)!
রবার্ট সিমার

2
আপনি আমাকে "এটাই জানা দরকার [...]। তবে ..."। :-) গিট এই জাতীয় জিনিসগুলিতে পূর্ণ যেখানে সমান স্বরলিপি এবং পরিভাষা অর্থ বিভিন্ন প্রসঙ্গে বিভিন্ন জিনিস; এটি এত ভালভাবে স্পষ্ট করার জন্য ধন্যবাদ।
শ্রীভাতসারআর

রেভ-তালিকা উল্লেখ করার জন্য ধন্যবাদ। রেভ-পার্সের মাধ্যমে রেভ-তালিকা কী করে তা করার একটি উপায় খুঁজতে গিয়ে আমি এই প্রশ্নটি জুড়ে এসেছি।
ম্যাড পদার্থবিদ

"অন্য কথায়, git diff foo..barঠিক একইরকম git diff foo bar; উভয়ই আপনাকে দুটি শাখার ফু ও বারের টিপসের মধ্যে পার্থক্য দেখাবে show" "দুটি শাখার টিপসের মধ্যে পার্থক্য" বলতে কী বোঝ?
আসাদ মুসভি

60

আমার একীকৃত সংস্করণ .. বনাম ... সঙ্গে পরিবর্তন বনাম লগ

ডিফ বনাম লগ এবং বনাম ..


3
এটি খুব ভাল হবে, কেবল যদি এতে অনেকগুলি বিভিন্ন রঙ না থাকে এবং অপারেশনগুলি ../ স্টাফের সাথে একত্রে মিশ্রিত না হয় ...। উদাহরণস্বরূপ log A...Bএটি স্পষ্ট নয় যে কমান্ডটি ছেদটি (ডায়াগ্রামের সাদা অংশ) ফেরত দেয় বা এবি ইউনিয়নের বাকী অংশ (সবুজ) দেয় কিনা clear এটি কোনও সেট অপারেন্ড ছাড়াই এবং কেবল 1 টি রঙের সাথে আরও বেশি পয়েন্ট।
এক্সিলিটস

1
এই সত্যিই হওয়া উচিত diff A..B<-> log A...B, যে, সত্যিই নেই পরিবর্তন 2 বিন্দু সঙ্গে, মিলা লগ ইন করুন (!) 3 বিন্দু সঙ্গে? বা ছবিতে কোনও টাইপ রয়েছে। বিন্দুগুলি কীভাবে রঙিন কোড করা হয়েছে তা দেখে আমার মনে হয় ছবিতে একটি টাইপো রয়েছে। নীচের বাম কোণে: ডান (?) log A...Bহওয়া উচিত log A..B। এবং ডানদিকে লগ করা উচিত ...নয় ..
কাজম্যাগনুস

1
হাই ডলফিনড্রিম, আপনার চিত্রটির জন্য ধন্যবাদ। আমি এটি এখানে রেফারেন্স হিসাবে ব্যবহার করি: gitlab.com/tortoisegit/tortoisegit/issues/3427#note_227200695
ইউ লিন হো

1
@ কাজম্যাগনাস আসলে লাল / নীল রঙগুলি কেবল মাত্র 2-ডট এবং 3-ডটগুলির মধ্যে পার্থক্য করতে ব্যবহৃত হয় (ডিফ বা লগের সাথে নির্বিশেষে) চিত্রটি সঠিক। প্রথম কলামে, 2-ডটগুলির সাথে পৃথক হওয়ার ফলাফলটি 3-ডটসের সাথে লগের অনুরূপ (সুতরাং পুরো উদ্দেশ্য চিত্রটি দিয়ে শুরু হওয়া)। 2-ডটগুলির সাথে পার্থক্য উভয় প্রান্তে কোড পরিবর্তন করে বিভক্তকরণের বিন্দুতে (কমিটের চারপাশে সবুজ বুদবুদ এবং ভ্যান ডায়াগ্রামের সবুজ অংশ দ্বারা চিত্রিত) যখন 3-ডটসের সাহায্যে লগ পরিবর্তনের লগ দেয় (বার্তা প্রেরণ) উভয় revs পয়েন্ট ডাউন।
ডলফিনড্রিম

28

git diff foo master উপরের (মাথা) ফু ও মাস্টারের কমিটের মধ্যে পার্থক্য।

git diff foo..master একই জিনিস করার আরেকটি উপায়।

git diff foo...masterফু git merge-base foo masterও মাস্টারের টিপ-এর সাধারণ পূর্বপুরুষের থেকে পৃথক । অন্য কথায়, মাস্টার শাখা ফু এর সাধারণ পূর্বপুরুষের পর থেকে কেবলমাত্র সেই পরিবর্তনগুলি দেখায়।

গিটহাবের এই উদাহরণটি ব্যাখ্যা করে যে কখন দুটি ব্যবহার করবেন:

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

$ git diff master dev

এটি আপনাকে বলবে যে প্রথম ফাইল থেকে একটি ফাংশন যুক্ত হয়েছিল এবং README এ একটি লাইন যুক্ত হয়েছিল। কেন? কারণ শাখায়, README এর এখনও মূল লাইন রয়েছে, তবে 'মাস্টার'-এ আপনি এটি সরিয়ে দিয়েছেন - তাই সরাসরি স্ন্যাপশটের সাথে তুলনা করে' দেব 'যুক্ত হয়েছে বলে মনে হচ্ছে।

আপনি যা সত্যিই তুলনা করতে চান তা হ'ল 'শাখা' বদলেছে যেহেতু আপনার শাখাগুলি ডাইভারেজ হয়েছে। এটি করতে, গিটের একটি ছোট্ট ছোট্ট শর্টহ্যান্ড রয়েছে:

$ git diff master...dev


@ মানোজল্ডস ঠিক আছে, তাই আলাদা প্রশ্ন, আপনি যদি দেব শাখায় রয়েছেন এবং নিজের পরিবর্তনগুলি (ফাংশন) কমিট করেন এবং পরিবর্তনগুলিকে একটি দূরবর্তী দেব শাখায় ঠেলে দেন তবে এর অর্থ কি দৃশ্যমান পরিবর্তনটি কেবল ফাংশন বা ফাংশন এবং রিডমি?
ডেভিড

যদি আমার ভুল না হয় তবে গিটহাবের পুল অনুরোধ ডিফ ট্রিপল ডট ব্যবহার করে। এটা কি সঠিক?
শান লুটিন

গিটহাব উদাহরণ পৃষ্ঠায় ভাঙা লিঙ্ক।
কে.-মাইকেল আয়ে

6
git diff foo master

সময় এবং সেই সময় মাস্টার শাখার মধ্যে পার্থক্য দেখাবে

git diff foo..master

এটি সময় এবং পয়েন্টে সময় এবং মাস্টার শাখার মধ্যে পার্থক্য প্রদর্শন করবে

git diff foo...master

বিষয়টি যখন শাখা থেকে এবং তার পরে তৈরি হয়েছিল তার মধ্যে সমস্ত পার্থক্য দেখায়

সুতরাং প্রথম 2 টি কমান্ড একই এবং সর্বশেষ একটি পৃথক ইতিহাসে আরও বিস্তৃত দৃশ্য দেখায়


1

গিট লগ ট্রি

উপরের ছবিটি নীচের গ্রাফ গাছের সমান

A0 <- A1 <- A2 <- A3 (master)
   \
    C0 <- C1 (test)

একটি চিত্র হাজার শব্দের মূল্যবান, এর মধ্যে পার্থক্যটি .. ... ^নীচে দেখানো হয়েছে।

$ git log master..test
# output C0 C1

$ git log ^master test
# output C0 C1

$ git log master…test
# output A1 A2 A3 C0 C1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.