গিট - সুনির্দিষ্ট শাখার প্রথম কমিট কীভাবে সন্ধান করতে হয়


95

নিম্নলিখিত উদাহরণে গাছ:

A-B-C-D-E (master branch)
    \
     F-G-H (xxx branch)

আমি এফ খুঁজছি - এক্সএক্সএক্স শাখায় প্রথম কমিট। আমি মনে করি এটি দিয়ে এটি সম্ভব:

git log xxx --not master

এবং সর্বশেষ তালিকাভুক্ত প্রতিশ্রুতিটি এফ হওয়া উচিত এটি সঠিক সমাধান নাকি এর কিছু অসুবিধা হতে পারে?

আমি জানি যে স্ট্যাকওভারফ্লোতেও একই রকম প্রশ্ন ছিল, তবে কেউই এ জাতীয় সমাধানের প্রস্তাব করেনি, এবং আমি ঠিক করি না আমি নিশ্চিত নই।


সম্ভাব্য সদৃশ stackoverflow.com/questions/6058308/...
nyzm

উত্তর:


112
git log master..branch --oneline | tail -1

যেখানে "শাখা" আপনার নির্দিষ্ট শাখার নাম। ডট-ডট আপনাকে সমস্ত কমিট দেয় যে শাখার সেই মাস্টারের নেই। tail -1পূর্ববর্তী আউটপুট থেকে শেষ লাইনটি প্রদান করে।


4
এটি কেবলমাত্র যদি `ব্রাঞ্চ`` উপস্থিত থাকে তবে কাজ করে। শাখাটি মুছে ফেলা হলে আপনি এটি কীভাবে করবেন?
Oz123

4
@ ওজ 123 শাখা যে কোনও রেফ দ্বারা প্রতিস্থাপন করা যেতে পারে, যেমন হেড বা একটি শ 1 বা একটি ট্যাগ। তবে স্পষ্টতই আপনার এক প্রকার রেফারেন্স দরকার।
জিতরেক্স

4
আমি যা প্রত্যাশা করছিলাম তা আমাকে দেয় না। আমার শাখা (পুরানো) ইতিমধ্যে মাস্টারে ফিরে একীভূত হয়েছিল, যার অর্থ xXX এ করা সমস্ত কমিট ইতিমধ্যে মাস্টার হিসাবে রয়েছে। তবুও - আমার জানা দরকার যে সেই শাখায় প্রথমটি কোন প্রতিশ্রুতিবদ্ধ ছিল - বা প্রকৃতপক্ষে - আমাকে কেবল সেই শাখার কমিটির ইতিহাস পরীক্ষা করা দরকার - তারা মাস্টারে আছে কি না সে বিষয়ে আমার কোন চিন্তা নেই।
মোটি শ্নের

4
আপনি কীভাবে একীভূত হয়েছিলেন তার উপর নির্ভর করে @ মোটিশ্নোর, এটি কৌশলপূর্ণ হতে পারে। যদি আপনি দ্রুত-অগ্রসর করেন তবে মনে হয় শাখার অস্তিত্ব কখনও নেই। অন্যথায়, আপনি এই উত্তরে আগ্রহী হতে পারেন , যা শাখা পয়েন্টটি সন্ধান করার জন্য বেশ কয়েকটি উপায়ের তালিকা করে। আপনার ব্রাঞ্চ পয়েন্ট হয়ে গেলে, এসএএএ প্রতিস্থাপন করতে পারে masterএবং যতক্ষণ না আপনার শাখাটি মুছে ফেলা হয়নি, ততক্ষণ git log <sha>..branch --oneline | tail -1আপনি যা খুঁজছেন ফলাফল আপনাকে দেওয়া উচিত।
এনডি গীক

4
আপনি --reverseলগগুলি রঙ ইত্যাদির পিছনে পিছনে পড়তে ব্যবহার করতে পারেন
ডোমিনিক

9

merge-baseঠিক এই সমাধান করার জন্য ডিজাইন করা কার্যকারিতাটি আপনার ব্যবহার করা উচিত :

git merge-base remotes/origin/<branch> develop 

আপনি যদি মূল কাঁটাচামুতে ফিরে যেতে চান তবে এটি কাজ করবে বলে আমি মনে করি না। আপনি <ব্রাঞ্চ> এ বিকাশটি মার্জ করলে বেসটি মূল কাঁটাচামড়ার চেয়ে নতুন হবে।
আলেকজান্ডার মিলস

4
এছাড়াও, এটি এফকে নির্দেশ করবে না , তবে মাস্টার শাখায় প্রতিশ্রুতিবদ্ধ হবে (যদিও ওপি'র অঙ্কনে দেখা কঠিন, বি বা সি বলে মনে হচ্ছে)।
রোমেনভ্যালেরি


1

যদি আপনার শাখা (পুরানো) আবারও মাস্টারের সাথে একীভূত হয় তবে প্রত্যাশিত ফলাফল না দেয় initial

গিট রেভ-তালিকা - প্রথম পিতামাতার পরিবর্তন

- প্রথম -পিতা-মাতার একীভূত প্রতিশ্রুতি দেখার পরে প্রথম পিতামাতার প্রতিশ্রুতি অনুসরণ করে।

অভিভাবক শাখার সন্ধান না পাওয়া অবধি উপরের কমান্ড থেকে চেঞ্জসেটগুলি ইট্রেট করুন।

def status_check(exec_command, exec_dir=None, background=False):
    if exec_dir:
        os.chdir(exec_dir)
    res = subprocess.Popen(exec_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    if not background:
        result = res.communicate()
    return result



def findNewBranchCommits(changeset=None):
    cmd = "git rev-list --first-parent "+ changeset
    rev_list = status_check(cmd,self.module_dir)
    rev_list = str(rev_list[0]).split('\n')
    rev_list = list(filter(None, rev_list))
    for x in rev_list:                      # Iterate until branch base point
        rev_cmd = "git branch --contains " + x
        rev_cmd = status_check(rev_cmd,self.module_dir)
        rev_cmd = str(rev_cmd[0]).split('\n')
        if(len(rev_cmd) > 2): 
            print "First Commit in xxx branch",x
            break

findNewBranchCommits(changeset)

0
git cherry master -v | tail -1   

তবে এটি আপনাকে কেবল শাখা xxx এ প্রথম প্রতিশ্রুতি দেবে যা মাস্টার নয়, শাখা এক্সএক্সএক্সএক্সের প্রথম কমিট নয়। দ্বিতীয়টি যদি শাখা এক্সএক্সএক্স মুছে ফেলা হয় এবং / অথবা এক বা একাধিকবার পুনরায় তৈরি করা হয় তবে এটি কঠিন হবে। এই ক্ষেত্রে আপনি নিম্নলিখিত চেষ্টা করতে পারেন:

git reflog | grep checkout | grep xxx | tail -1   

4
আপনি কি head -n 1পরিবর্তে লিখতে চেয়েছিলেন tail -1? tail -1প্রথমটির পরিবর্তে সাম্প্রতিক প্রতিশ্রুতি দেয়।
নেলু

0

আমি এই আদেশটি চেষ্টা করেছি এবং এটি কার্যকর হয়েছে:

git log <source_branch> <feature_branch> --oneline | tail -1

-1

git rev-list --ancestry-path $(git merge-base master xxx)..xxx | tail -1


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