'গিট লগ' দ্বারা প্রথম প্রতিশ্রুতিবদ্ধতা কীভাবে প্রদর্শিত হবে?


288

আমার একটি প্রকল্প রয়েছে যার দীর্ঘ ইতিহাস রয়েছে। আমি গিটে প্রথম প্রতিশ্রুতি প্রদর্শন করতে চাই

আমি এটা কিভাবে করবো?


2
আমি কেবল শেষ দেখানোর উপায় খুঁজে পেয়েছি git log -1
অ্যালেক্স

উত্তর:


298

সংক্ষিপ্ত উত্তর

git rev-list --max-parents=0 HEAD

( টিহোর মন্তব্য থেকেক্রিস জনসন নোটিশ হিসাবে , --max-parentsএই উত্তর পোস্ট হওয়ার পরে প্রবর্তিত হয়েছিল।)

ব্যাখ্যা

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

git.gitসংগ্রহস্থলের এর ইতিহাস গ্রাফ ছয় রুট করে আছে (এক প্রতিটি লিনাস প্রাথমিক কমিট, gitk , কিছু প্রাথমিকভাবে পৃথক সরঞ্জাম, Git-GUI , gitweb , এবং Git-P4 )। এই ক্ষেত্রে, আমরা জানি যে e83c516আমরা সম্ভবত এটিতে আগ্রহী It এটি প্রথম দিকের প্রতিশ্রুতি এবং মূল প্রতিশ্রুতি উভয়ই।

সাধারণ ক্ষেত্রে এটি এত সহজ নয়।

ভাবুন যে libfoo কিছু সময়ের জন্য বিকাশ লাভ করেছে এবং একটি গিট সংগ্রহস্থল ( libfoo.git) এ তার ইতিহাস রাখে । স্বতঃস্ফূর্তভাবে, "বার" প্রকল্পটি বিকাশের অধীনেও রয়েছে (ইন bar.git), তবে দীর্ঘকালীন লিফফুর জন্য নয় (প্রথম দিকে তারিখের সাথে কমিটেরlibfoo.git একটি তারিখ রয়েছে যা পূর্বের তারিখের সাথে কমিটের আগে রয়েছে bar.git)। এক পর্যায়ে "বার" এর বিকাশকারীরা সাবট্রি মার্জ ব্যবহার করে লাইবফুকে তাদের প্রকল্পে অন্তর্ভুক্ত করার সিদ্ধান্ত নেন । এই মার্জ হওয়ার আগে এটি "প্রথম" প্রতিশ্রুতি নির্ধারণ করতে তুচ্ছ হতে পারে bar.git(সম্ভবত কেবলমাত্র একটি মূল প্রতিশ্রুতি ছিল)। মার্জ হওয়ার পরে, তবে একাধিক রুট কমিটস রয়েছে এবং প্রাথমিক রুট কমিট আসলে লাইবফো- এর ইতিহাস থেকে আসে, "বার" নয়।

আপনি ইতিহাসের সমস্ত মূল কমিটগুলি ডিএজি এর মতো দেখতে পাবেন:

git rev-list --max-parents=0 HEAD

রেকর্ডের জন্য, যদি --max-parentsনা পাওয়া যায় তবে এটি কাজ করে:

git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"

যদি আপনার জায়গায় দরকারী ট্যাগ থাকে, তবে git name-revআপনাকে ইতিহাসের একটি দ্রুত ওভারভিউ দিতে পারে:

git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" | git name-rev --stdin

বোনাস

এটি প্রায়শই ব্যবহার করবেন? মনে রাখা শক্ত? দ্রুত অ্যাক্সেসের জন্য একটি গিট ওরফে যুক্ত করুন

git config --global alias.first "rev-list --max-parents=0 HEAD"

এখন আপনি সহজভাবে করতে পারেন

git first

49
আমি বিশ্বাস git rev-list --max-parents=0 HEADকরি এটি একই কাজ করবে এবং এটি কিছুটা সহজ।
tiho

3
@ তিহো: হ্যাঁ, এটি একই রকম, এবং সহজ; যদিও এই প্রশ্ন / উত্তরের সময় সেই বিকল্পটি বেশ "আবিষ্কার" করা হয়নি been
ক্রিস জনসেন

এটা আমার কাছে যেটা প্রথম কমিট একটি বেশি হয় গাছের পাতা তুলনায় কমিট রুট কমিট
tiwo

@ তবুও আমি মনে করি আপনার উত্তরটি কেবল একটি মন্তব্য নয়, তার নিজস্ব উত্তর হওয়া উচিত। এইভাবে এটি আরও বিশিষ্ট হবে এবং আপনি অনেক প্রাপ্য পয়েন্ট পাবেন।
রাসেল সিলভা

@ রাসেলসিলভা আমি পয়েন্টগুলির বিষয়ে চিন্তা করি না, তবে আমি বিশ্বাস করি যে অন্য ব্যক্তির উত্তরগুলি সম্পাদনা করা সম্ভব, এটি সম্ভবত একটি নতুন যুক্ত করার চেয়ে ভাল। যদিও আমি নিজে এটি করতে সত্যই স্বাচ্ছন্দ্য বোধ করি না, নিখরচায় মনে করি :)
tiho

413

আমি এটি পেয়েছি:

git log --reverse

শুরু থেকে কমিটগুলি দেখায়


19
আকর্ষণীয়ভাবে git log --reverse -5এটি --reverseকোনও কারণে উপেক্ষা করে তোলে
Dan2552

6
@ Dan2552 একটি বাগের মতো দেখে মনে হচ্ছে, রিপোর্ট করা উচিত?
সাeedদগনু

23
দেখে মনে হচ্ছে এটি প্রথমে ফলাফলগুলিকে 5 টি এন্ট্রি-তে সীমাবদ্ধ করে এবং তারপরে বিপরীত
অবিচ্ছিন্নতা

3
@ 太極 者 無極 而 生 ঠিক আছে, এটি ডকুমেন্টেড আচরণ।
গুরুতরদেব

43

আপনি কেবল নিজের লগকে বিপরীত করতে পারেন এবং প্রথম ফলাফলের জন্য এটি শীর্ষে রাখতে পারেন।

git log --pretty=oneline --reverse | head -1

7
git log --reverseইতিহাসকে বিপরীত করে, তাই আপনাকে প্রথম প্রতিশ্রুতি দেওয়ার head -1পরিবর্তে ব্যবহার tail -1করতে হবে।
রুবিয়ি

4
এটি দেওয়া ভাল যখন গিটটি প্রদত্ত -nহওয়ার সময় পতাকাটিকে অগ্রাহ্য না করে --reverse
ফ্রেডরিক নর্ড


6

এটি করার সর্বাধিক সুন্দর উপায় নয় বলে আমার ধারণা:

git log --pretty=oneline | wc -l

এটি আপনাকে তখন একটি সংখ্যা দেয়

git log HEAD~<The number minus one>

1

git log --format="%h" | tail -1আপনাকে প্রতিশ্রুতিবদ্ধ হ্যাশ দেয় (অর্থাত্‍ 0dd89fb), যা আপনি অন্য কোনও কমান্ডে ফিড করতে পারেন, এর মতো কিছু করে

git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD শেষ দিনে সমস্ত কমিটগুলি দেখতে।

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