গিট: দুটি শাখার অতি সাম্প্রতিক সাধারণ পূর্বপুরুষটি খুঁজুন


844

দুটি গিট শাখার অতি সাম্প্রতিক সাধারণ পূর্বপুরুষ কীভাবে সন্ধান করবেন?


3
সাম্প্রতিকতম সংজ্ঞা দিন: আসল বিশ্ব সময়, কমিটের সংখ্যা, অন্যান্য মেট্রিক?
সিরো সান্তিলি 冠状 病毒 审查 六四 事件 法轮功

2
প্রাসঙ্গিক (ক্রুশাকার মার্জ): stackoverflow.com/questions/26370185/...
jub0bs

1
@ সিরোস্যান্টিলি 新疆 改造 中心 996ICU 事件 any এটি কোনও মেট্রিকের ক্ষেত্রে একই রকম, তাই না?
ইয়াকভল

@ ইয়াকভল আমি শাখা প্রশাখার কারণে বিশ্বাস করি না এবং কারণ আপনি নিজের প্রতিশ্রুতিবদ্ধ বস্তুগুলিতে নির্বিচারে প্রতিশ্রুতিবদ্ধতার তারিখ নির্ধারণ করতে পারেন: সেই তারিখটি সম্ভবত আপনি চান তা নয় not
সিরো সান্তিলি 冠状 病毒 审查 六四 事件

1
@ সিরোস্যান্টিলি 新疆 改造 中心 996ICU 事件 事件 আমার কাছে মনে হয়েছে যে গাছটিতে শেষ কমন কমিট করার আগে একটি প্রতিশ্রুতি রয়েছে যার একটি পুরানো টাইমস্ট্যাম্প রয়েছে only আপনি কি কম তুচ্ছ উদাহরণ দিতে পারেন?
ইয়াকভল

উত্তর:


1019

আপনি খুঁজছেন git merge-base। ব্যবহার:

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

85
নোট করুন যে এটি সর্বাধিক সাম্প্রতিক সাধারণ পূর্বপুরুষকে খুঁজে পেয়েছে ... যা আমি বিশ্বাস করি যা প্রশ্নকর্তা তাই চান, তাই +1। শুধু তা লক্ষ, কেস যে কেউ আসে এখানে খুঁজে বের করার চেষ্টা প্রাচীনতম (যেমন I did) সাধারণ পূর্বপুরুষ - যার জন্য, এছাড়াও দেখুন: stackoverflow.com/questions/1527234/...
lindes

16
@ ফনরোল: বা এর জন্য সংক্ষিপ্ত:git log master...HEAD
সিবি বেইলি

17
@ লিন্ডস কি প্রাচীনতম পূর্বপুরুষদের প্রাথমিক প্রতিশ্রুতিবদ্ধ না?
থরবজর্ন রাভন অ্যান্ডারসন

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

5
যদিও এই প্রশ্নটি দুটি শাখার একটি সাধারণ পূর্বপুরুষকে সন্ধানের বিষয়ে কঠোরভাবে রয়েছে, তিন বা ততোধিক শাখার সাধারণ পূর্বপুরুষের যে কেউ চান তাদের অবশ্যই লক্ষ্য করা উচিত যে --octopusসঠিক ফল পেতে তাদের পতাকা পাস করা দরকার । সুস্পষ্ট কিন্তু-ভুল git merge-base branch1 branch2 branch3আপনি একটি কমিট, কিন্তু দস্তাবেজে আলোচনা অধ্যায় বর্ণনা অনুযায়ী দেব, এটা নয় অগত্যা সব তিনটি শাখা একটি সাধারণ পূর্বপুরুষ।
মার্ক আমেরিকা

46

git diff master...feature

আপনার বর্তমান (সম্ভবত মাল্টি-কমিট) বৈশিষ্ট্য শাখার সমস্ত নতুন কমিট দেখায়।

man git-diff নথি যা:

git diff A...B

হিসাবে একই:

git diff $(git merge-base A B) B

তবে ...টাইপ করা এবং মনে রাখা সহজ।

ডেভ দ্বারা উল্লিখিত হিসাবে , বিশেষ ক্ষেত্রে HEADবাদ দেওয়া যেতে পারে। তাই:

git diff master...HEAD

হিসাবে একই:

git diff master...

বর্তমান শাখা হলে যা যথেষ্ট feature

অবশেষে, মনে রাখবেন যে আদেশ গুরুত্বপূর্ণ! এরকম git diff feature...masterযে পরিবর্তন হয় দেখাবে masterনা feature

আমি আশা করি আরও গিট কমান্ডগুলি সেই সিনট্যাক্সটিকে সমর্থন করবে, তবে আমার মনে হয় না তারা তা করে। কারও কারও কাছে আলাদা শব্দার্থক শব্দ রয়েছে ...: গিট কমিট রেঞ্জের ডাবল-ডট ".." এবং ট্রিপল-ডট "..." এর মধ্যে পার্থক্য কী?


8
বা কেবল git diff master...ভিন্নর ক্ষেত্রে বিশেষ ক্ষেত্রেHEAD
ডেভ

"..." পাওয়ারশেলের জন্য আমার পক্ষে কাজ করেনি, মজাদার এটি গিট কনসোলে কাজ করেছিল হয়তো রেপো সম্পূর্ণ ছিল না, গিফ ডিফার $ (গিট মার্জ-বেস এ বি) বি করেছে এবং যেহেতু আমি গিটে কিছুটা নতুন আমি কিছুটা সংশয়ী ছিলাম যে এটি শাখাগুলিকে একীভূত করতে পারে :)
মইজ আহমেদ

1
কি দারুন. বেশ চমৎকার. আপনি যে শাখাটি চান তা যদি আপনার স্থানীয় রেপোতে উপস্থিত না থাকে কারণ আপনি কখনই এটি পরীক্ষা করে দেখেন নি, আপনি কেবল পারেনgit diff origin/branchname...
মার্ক সিএইচ

25

পূর্বের উত্তরে উল্লিখিত হিসাবে, git merge-baseকাজ করে:

$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

তবে যদি myfeatureবর্তমান শাখাটি সাধারণ হয় তবে আপনি ব্যবহার করতে পারেন --fork-point:

$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

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


সম্পূর্ণ প্রতিশ্রুতিবদ্ধ তথ্যের জন্য, বিবেচনা করুন:

$ git log -1 $(git merge-base --fork-point develop) 

আমি git version 2.14.1.windows.1। চলমান git merge-base --fork-point branch2একটি শাখা সঙ্গে (তার নিজের করে সঙ্গে) যে আমি জানি বর্তমান শাখা থেকে forked কোনো ফল নয়, যেহেতু git merge-base branch1 branch2সঠিকভাবে কাঁটাচামচ বিন্দু দেখায়। কি সমস্যা হতে পারে?
এডিটিসি

@ এডটিসি চেকআউট branch2এবং তারপরে চালান git merge-base --fork-point branch1
একিউম্যানাস

@ এডটিসি gitkগাছের চেহারা কেমন তা দেখতে গ্রাফিক্যাল কমিট ভিউয়ার, যেমন ইত্যাদি ব্যবহার করুন । আপনি আপনার উত্তর পেতে পারে।
একিউম্যানাস

আমি গাছটি গ্রাফিকভাবে দেখতে পাচ্ছি বলে কিছুই দেখতে পাচ্ছি না। আমি পাথগুলি সন্ধান করতে এবং ফলাফলের সাথে মেলে এমন সাধারণ পূর্বপুরুষকে খুঁজে পেতে পারি git merge-base branch1 branch2। তবে কি বিজোড় এটি --fork-pointকোন উপায় দেয় না। আপনি কি নিশ্চিত করেছেন যে এটি আপনার পক্ষে যেমন কাজ করেছে তেমনি কাজ করে?
এডিটিসি

1
আমি @ ADTC- তে একই পেয়েছি। 'গিট লগ -১ $ (গিট মার্জ-বেস - ফোর-পয়েন্ট আরেকটি ব্রাঞ্চ)' কমান্ডটি গিট সংস্করণ ২.১16.২.উইনডোজ .১ ব্যবহার করে কোনও ফলাফল দেখায় না।
মাসিংগার

10

gitkআপনি গ্রাফিক দুটি শাখা দেখতে পারেন সঙ্গে :

gitk branch1 branch2

এবং তারপরে দুটি শাখার ইতিহাসে সাধারণ পূর্বপুরুষের সন্ধান করা সহজ।


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