আমার একটি প্রকল্প রয়েছে যার দীর্ঘ ইতিহাস রয়েছে। আমি গিটে প্রথম প্রতিশ্রুতি প্রদর্শন করতে চাই
আমি এটা কিভাবে করবো?
আমার একটি প্রকল্প রয়েছে যার দীর্ঘ ইতিহাস রয়েছে। আমি গিটে প্রথম প্রতিশ্রুতি প্রদর্শন করতে চাই
আমি এটা কিভাবে করবো?
উত্তর:
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
git rev-list --max-parents=0 HEADকরি এটি একই কাজ করবে এবং এটি কিছুটা সহজ।
আমি এটি পেয়েছি:
git log --reverse
শুরু থেকে কমিটগুলি দেখায়
git log --reverse -5এটি --reverseকোনও কারণে উপেক্ষা করে তোলে
আপনি কেবল নিজের লগকে বিপরীত করতে পারেন এবং প্রথম ফলাফলের জন্য এটি শীর্ষে রাখতে পারেন।
git log --pretty=oneline --reverse | head -1
git log --reverseইতিহাসকে বিপরীত করে, তাই আপনাকে প্রথম প্রতিশ্রুতি দেওয়ার head -1পরিবর্তে ব্যবহার tail -1করতে হবে।
-nহওয়ার সময় পতাকাটিকে অগ্রাহ্য না করে --reverse।
git log $(git log --pretty=format:%H|tail -1)
git log $(git log --reverse --pretty=format:%H|head -1)
git log --format="%h" | tail -1আপনাকে প্রতিশ্রুতিবদ্ধ হ্যাশ দেয় (অর্থাত্ 0dd89fb), যা আপনি অন্য কোনও কমান্ডে ফিড করতে পারেন, এর মতো কিছু করে
git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD শেষ দিনে সমস্ত কমিটগুলি দেখতে।
git log -1।