কীভাবে কেবল একটি শাখার প্রতিশ্রুতিবদ্ধ ইতিহাস পাবেন?


128

আসুন আমি একটি নতুন শাখা নির্মিত বলে my_experimentথেকে masterএবং বিভিন্ন করে প্রণীত my_experiment। আমি git logযখন কাজটি চালু করি my_experiment, তখন আমি এই শাখায় করা কমিটগুলি দেখতে পাচ্ছি, তবে শাখাটি তৈরি হওয়ার masterআগে করা কমিটগুলিও দেখছি my_experiments

আমি my_experimentsশাখাটিতে সমস্ত প্রতিশ্রুতিবদ্ধ হওয়া ইতিহাসগুলি দেখতে খুব দরকারী মনে করব যতক্ষণ না এটি শাখাটি তৈরির ক্ষেত্রে হিট করে - কার্যকরভাবে কেবল সেই শাখার একটি সত্য ইতিহাস। অন্যথায় এটি লগটি সন্ধান করার সময় আমার কাছে স্পষ্ট নয় যে কমিটগুলি my_experimentsশাখায় ছিল কি না।

গিট দিয়ে এটি করার কোনও উপায় আছে?

উত্তর:


139

এটি করতে আপনি একটি ব্যাপ্তি ব্যবহার করতে পারেন ।

git log master..

আপনি যদি আপনার my_experimentশাখাটি পরীক্ষা করে দেখেন। এটি তুলনা করবে যেখানে (টিপস ) কোথায় masterরয়েছে ।HEADmy_experiment


3
ঠিক আছে খুব তাড়াতাড়ি কথা বলা। এটি আমার সাধারণ উদাহরণের জন্য এটি করেছে। তবে এখন আমি অন্য কারও আসল রেপো দেখছি এবং আমার কাছে এটি ঘটেছিল যে এই কমান্ডটি সঠিকভাবে ব্যবহার করার জন্য, আমার বর্তমান শাখাটি কোন শাখা থেকে তৈরি হয়েছিল তা আমার জানতে হবে। সম্ভবত আমি গিটক থেকে এটি বলতে সক্ষম হওয়া উচিত তবে এটি আমার কাছে স্পষ্ট নয়। কোন চিন্তা?
মার্প্লেসফট

@ মারপ্লেসফট এটি নির্ধারণ করা জটিল হতে পারে। এই প্রশ্নটি দেখুন ।
অ্যালেক্স

আপনি কীভাবে এটি সংক্ষেপে ব্যাখ্যা করতে পারেন? git log master..গিটকে কী বলে ?
টোনিক্স

2
@ টোনিক্স একটি ব্যাপ্তি ( master..ভাগ) কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য উত্তরের লিঙ্কটি অনুসরণ করুন ।
এলেক্স

7

git merge-baseকমান্ড একটি সাধারণ পূর্বপুরুষ এটি ব্যবহার করা যাবে। সুতরাং যদি আমার_অভিজ্ঞাকে এখনও মাস্টারের সাথে একীভূত করা হয়নি এবং মাস্টার থেকে আমার_অভিজ্ঞ তৈরি করা হয়েছে আপনি পারেন:

git log --oneline `git merge-base my_experiment master`..my_experiment

আপনি আপনার প্রথম কমিট, যোগ অভিভাবক অন্তর্ভুক্ত করতে চাইলে ^ এবং --first পিতা বা মাতা : git log --oneline `git merge-base my_experiment master`^..my_experiment --first-parent
এরিক Lavoie

7

দ্রষ্টব্য: যদি আপনি সেই লগটি শেষ এন কমিটের মধ্যে সীমাবদ্ধ করেন (উদাহরণস্বরূপ শেষ 3 টি কমিট করুন, গিট লগ -3), অবশ্যই 'এন' এবং আপনার শাখার মধ্যে একটি স্থান রাখার বিষয়টি নিশ্চিত করুন:

git log -3 master..

গিট ২.১ (আগস্ট ২০১৪) এর আগে, এই ভুলটি: সীমাটি উপেক্ষা করে git log -3master..(বর্তমান এখানে my_experiment) কেবলমাত্র বর্তমান শাখার শেষ তিনটি প্রতিশ্রুতি আপনাকে দেখায় master(যার অর্থ যদি my_experimentকেবল একটি প্রতিশ্রুতি থাকে তবে 3 এখনও তালিকাভুক্ত হবে, এর মধ্যে 2 টি master)

জুনিও সি হামানো ( ) দ্বারা প্রতিশ্রুতিবদ্ধ e3fa568 দেখুন :gitster

পুনর্বিবেচনা: git log -<count>আরও সাবধানে " " পার্স করুন

এই ভুল টাইপ করা কমান্ড লাইনটি কেবল " master" উপেক্ষা করে বর্তমান থেকে দুটি কমিট দেখিয়ে শেষ করে HEAD:

$ git log -2master

কারণ আমরা পুরো স্ট্রিংটিকে পূর্ণসংখ্যা হিসাবে পার্স করা হয়েছে কিনা তা নিশ্চিত 2masterনা atoi()করেই " " খাওয়ান ।

ব্যবহার করুন strtol_i()পরিবর্তে সাহায্যকারী ফাংশন।


1

আপনি শুধুমাত্র ব্যবহার করতে পারেন git log --oneline


যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
DebanjanB

1

আমি মনে করি আপনার উদ্দেশ্যগুলির জন্য একটি বিকল্প git log --online --decorate। এটি আপনাকে চেক করা প্রতিশ্রুতি জানতে দেয় এবং শীর্ষস্থানীয় আপনার গল্পের লাইনে থাকা প্রতিটি শাখার জন্য সম্মতি দেয়। এটি করার দ্বারা, আপনার রেপোর কাঠামো এবং একটি নির্দিষ্ট শাখার সাথে সম্পর্কিত কমিটগুলির বিষয়ে আপনার একটি দুর্দান্ত দৃষ্টিভঙ্গি রয়েছে। আমি পড়া মনে এই শক্তি সাহায্যের।


0

আমি জানি এটির জন্য খুব দেরি হয়ে গেছে ... তবে আপনি যা খুঁজছিলেন তা পাওয়ার জন্য এখানে একটি (এত সহজ নয়) অনলাইনার রয়েছে:

git show-branch --all 2>/dev/null | grep -E "\[$(git branch | grep -E '^\*' | awk '{ printf $2 }')" | tail -n+2 | sed -E "s/^[^\[]*?\[/[/"
  • আমরা শাখার নাম এবং প্রকৃত শাখার রাজ্যে git show-branch(সতর্কতা প্রেরণে /dev/null) সাথে আপেক্ষিক অবস্থানের সাথে চুক্তিগুলি তালিকাভুক্ত করছি ।
  • তারপরে আমরা কেবল আমাদের ব্রাঞ্চের নামযুক্ত ব্রাকেটের সাথে রাখি grep -E "\[$BRANCH_NAME"
  • যেখানে আসলটি $BRANCH_NAMEপ্রাপ্ত হয় git branch | grep -E '^\*' | awk '{ printf $2 }'(তারার সাথে শাখাটি, তারা ছাড়াই প্রতিধ্বনিত হয়)।
  • আমাদের ফলাফলগুলি থেকে, আমরা শুরুতে অপ্রয়োজনীয় লাইনটি সরিয়ে ফেলি tail -n+2
  • এবং তারপর, আমরা fianlly আপ আউটপুট সবকিছু পূর্ববর্তী সরিয়ে পরিষ্কার [$BRANCH_NAME]সঙ্গে sed -E "s/^[^\[]*?\[/[/"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.