কম্পিউটার টিউটোরিয়াল

Git Log মাস্টার করুন: কমিট দেখার এবং ফিল্টার করার جامع গাইড

git log কমান্ড একটি Git রিপোজিটরির কমিটের রেকর্ড দেখায়। ডিফল্টভাবে, git log কমান্ড একটি কমিট হ্যাশ, কমিট মেসেজ এবং অন্যান্য কমিট মেটাডেটা দেখায়। আপনি git log আউটপুট বিভিন্ন অপশন ব্যবহার করে ফিল্টার করতে পারেন।

ভার্সন কন্ট্রোল সিস্টেমের একটি কোর পারপাস আছে — কীভাবে আপনার কোডবেস সময়ের সাথে সাথে এভলভ করেছে সেটি রেকর্ড করা। এটি আপনাকে দেখতে দেয় আপনার প্রজেক্টগুলো কীভাবে প্রগতি করেছে। আপনি জানতে পারেন কে আপনার প্রজেক্টে কন্ট্রিবিউট করেছে এবং আপনার কোডে কী পরিবর্তন হয়েছে এবং কখন।

আপনার Git রিপোজিটরি তৈরি করা ইতিহাস আপনি কীভাবে দেখবেন? সেটিই git log কমান্ড সাহায্য করতে পারে।

এই টিউটোরিয়ালে, উদাহরণ সহ git log কমান্ডের বেসিক এবং কীভাবে আপনি এটি ব্যবহার করতে পারেন একটি Git রিপোজিটরি ইনস্পেক্ট করতে তা আলোচনা করা হবে।

git log কমান্ড

git log কমান্ড একটি রিপোজিটরিতে করা সকল কমিটের একটি তালিকা দেখায়। আপনি প্রতিটি Git কমিটের হ্যাশ, প্রতিটি কমিটের সাথে জড়িত মেসেজ এবং আরও মেটাডেটা দেখতে পারেন। এই কমান্ড একটি রিপোজিটরির ইতিহাস ডিসপ্লে করার জন্য উপকারী।

যেখানে git status কমান্ড করেন্ট ওয়ার্কিং ডিরেক্টরির ওপর ফোকাস করে, git log আপনাকে আপনার রিপোজিটরির ইতিহাস দেখতে দেয়।

git log কমান্ড উদাহরণ

চলুন একটি উদাহরণের মাধ্যমে হাঁটি যাতে git log কমান্ড কীভাবে কাজ করে তা ইলাস্ট্রেট করা যায়। আমরা "demo-repository" নামে একটি রিপোজিটরিতে কাজ করছিলাম। এখন আমরা আমাদের রিপোজিটরিতে পুশ করা সকল কমিটের তালিকা দেখতে চাই। সেটি করতে আমরা এই কমান্ডটি ব্যবহার করতে পারি:

git log কমান্ড একটি রিপোজিটরিতে করা সকল কমিটের তালিকা রিটার্ন করে। এই কমান্ড দ্বারা রিটার্ন করা একটি একক কমিটের উদাহরণ:

commit 43433c674e3d6c86a889fad222dae179785893cf (HEAD -> master, origin/master, origin/HEAD)
Author: James Gallagher <37276661+jamesgallagher432@users.noreply.github.com>
Date: Tue Apr 7 13:09:58 2020 +0100
Update index.html

আসুন এই আউটপুটটি ধাপে ধাপে আলোচনা করি। git log কমান্ড দ্বারা রিটার্ন করা প্রতিটি এন্ট্রি থাকে:

  • কমিটের জন্য Secure Hash Algorithm (SHA) হ্যাশ, যা একটি রিপোজিটরিতে প্রতিটি কমিটকে অনন্যভাবে আইডেন্টিফাই করতে ব্যবহৃত হয়। আমাদের উপরের উদাহরণে, এটি ছিল "43433c674e3d6c86a889fad222dae179785893cf"।
  • কমিটের লেখক। আমাদের উদাহরণে, এটি ছিল James Gallagher। লেখকের ইমেইলও স্পেসিফাই করা থাকে।
  • কমিট পুশ করা তারিখ। আমাদের উদাহরণে, এটি ছিল মঙ্গলবার, এপ্রিল ৭।
  • কমিটের সাথে জড়িত মেসেজ। উপরে রিটার্ন করা কমিট মেসেজ ছিল "Update index.html"।

এই সব ডেটা আমাদের রিপোজিটরির কমিট সম্পর্কে উপকারী তথ্য দেয়।

git log আউটপুট ফিল্টার করা

ডিফল্টভাবে, git log এই কাঠামো ব্যবহার করে একটি রিপোজিটরিতে করা সকল কমিটের তালিকা রিটার্ন করে। আপনি কল্পনা করতে পারেন, অনেক কমিট থাকলে আপনার git log স্টেটমেন্ট পড়া দ্রুত কঠিন হতে পারে।

git log-এর সাথে কিছু ফ্ল্যাগ থাকে যা আপনি আপনার লগ ফিল্টার করতে ব্যবহার করতে পারেন। এগুলো হলো:

সাম্প্রতিক কমিট অনুযায়ী ফিল্টার

আপনি যদি একটি নির্দিষ্ট সংখ্যক কমিট রিটার্ন করতে চান, তবে আপনি -n ফ্ল্যাগ ব্যবহার করে এটি করতে পারেন। এখানে এই ফ্ল্যাগের একটি উদাহরণ:

এই কমান্ড একটি রিপোজিটরিতে করা তিনটি সাম্প্রতিক কমিটের তালিকা রিটার্ন করে।

লেখক বা কমিটার অনুযায়ী ফিল্টার

আপনি git log দ্বারা রিটার্ন করা কমিটগুলো পরিবর্তনকারী বা কমিটকারী ব্যক্তির দ্বারা ফিল্টার করতে পারেন। মনে করুন আমরা "John Smith" দ্বারা পুশ করা কমিটের তালিকা দেখতে চাই। আমরা এই কমান্ডগুলো ব্যবহার করে এটি করতে পারি:

git log --author="John Smith"
git log --committer="John smith"

author ফ্ল্যাগ রেজাল্টসকে কমিটগুলোর মধ্যে সীমাবদ্ধ করে যেগুলোর পরিবর্তন John Smith করছিল। committer ফ্ল্যাগ রেজাল্টসকে সীমাবদ্ধ করে সেসব কমিট যেগুলো ওই ব্যক্তি দ্বারা আসলেই কমিট করা হয়েছিল।

আপনি পাবেন যে, অধিকাংশ কেসে, লেখক এবং কমিটার একই ব্যক্তি। বড় প্রজেক্টে, একটি কমিটের লেখক সেই কমিটকে রিপোজিটরিতে পুশ করার ব্যক্তি নাও হতে পারে। এই দুটি ফ্ল্যাগের জন্যই এই দুটি অস্তিত্বে আছে।

তারিখ অনুযায়ী ফিল্টার

অতিরিক্তভাবে, আপনি git log-এর রেজাল্টস তারিখ অনুযায়ী ফিল্টার করতে পারেন। সেটি করতে আপনি --before এবং --after ফ্ল্যাগ ব্যবহার করতে পারেন। এই দুটি ফ্ল্যাগ বিভিন্ন ডেট ফরম্যাট গ্রহণ করে, কিন্তু দুটি সবচেয়ে সাধারণ হলো রিলেটিভ রেফারেন্স এবং ফুল ডেট।

মনে করুন আমরা ২০১৯-৩-২ এর পরের কমিটের তালিকা পেতে চাই। আমরা এই কমান্ড ব্যবহার করে এটি করতে পারি:

git log --after="2019-3-2"

আমরা কমিট ফিল্টার করার জন্য একটি ডেট স্পেসিফাই করেছি। একইভাবে, যদি আমরা গতকালের আগের কমিটের তালিকা পেতে চাই, তবে আমরা এই কমান্ড ব্যবহার করতে পারি:

git log --before="yesterday"

আমরা একটি রিলেটিভ ভ্যালু ("yesterday") স্পেসিফাই করেছি।

এখন, মনে করুন আমরা ২০১৯-৩-২ এর পর এবং ২০১৯-৩-১৯ এর আগে পাবলিশ করা কমিটের তালিকা পেতে চাই। আমরা এই কমান্ড ব্যবহার করে এটি করতে পারি:

git log --after="2019-3-2" --before="2019-3-19"

ফাইল অনুযায়ী ফিল্টার

আপনি git log কমান্ড ব্যবহার করলে, আপনি শুধু সেই কমিটের তালিকা দেখতে চাইতে পারেন যেগুলো একটি নির্দিষ্ট ফাইলকে প্রভাবিত করেছে। সেটি করতে, আপনি সে ফাইল স্পেসিফাই করতে পারেন যেসের পরিবর্তন আপনি দেখতে চান।

মনে করুন আমরা আমাদের কোডে "main.py" ফাইলে করা পরিবর্তন দেখতে চাই। আমরা নিচের কমান্ড ব্যবহার করে এটি করতে পারি:

— স্টেটমেন্ট git log কমান্ডকে নির্দেশ করে যে আমরা যেসব আর্গুমেন্ট স্পেসিফাই করেছি সেগুলো ফাইল পাথ, ব্রাঞ্চের নাম নয়।

আমাদের কমান্ডে, আমরা শুধু এক ফাইল স্পেসিফাই করেছি যেটি আমরা git log কমান্ডের রেসপন্স ফিল্টার করতে ব্যবহার করতে চাই। কিন্তু, আপনি চাইলে একাধিক ফাইল স্পেসিফাই করতে পারেন।

কন্টেন্ট অনুযায়ী ফিল্টার

আপনি সেই কমিট সার্চ করতে পারেন যেগুলো একটি নির্দিষ্ট লাইন অফ কোড যোগ বা রিমুভ করেছে।

Git Log মাস্টার করুন: কমিট দেখার এবং ফিল্টার করার جامع গাইড
"Career Karma আমার জীবনে ঢুকেছিল যখন আমার সেটি সবচেয়ে বেশি দরকার ছিল এবং দ্রুত একটি বুটক্যাম্পের সাথে মিলিয়ে দিয়েছিল। গ্র্যাজুয়েট হওয়ার দুই মাস পর আমি আমার স্বপ্নের চাকরি পেয়েছিলাম যা আমার মূল্যবোধ এবং লক্ষ্যের সাথে মিলে যেত!"

— ভেনাস, সফটওয়্যার ইঞ্জিনিয়ার, রকবট

আপনার বুটক্যাম্প ম্যাচ খুঁজুন

মনে করুন আমরা "# Introduction" টার্মটি আমাদের কোডে যোগ করা সকল কমিট সার্চ করতে চাই। আমরা এই কমান্ড ব্যবহার করে এটি করতে পারি:

git log -S"# Introduction"

-S ফ্ল্যাগ ব্যবহার করে আমরা আমাদের কমিটের তালিকায় কোন কমিট পরিবর্তন খুঁজতে চাই তা স্পেসিফাই করি। লক্ষ্য করুন যে -S ফ্ল্যাগ এবং এর ভ্যালুর মধ্যে কোনো স্পেস বা ইকوال সাইন নেই। এছাড়া, কোটেশন মার্কস যা আমরা কমিটের কন্টেন্ট স্পেসিফাই করতে ব্যবহার করেছি যেটি খুঁজছি।

রেঞ্জ অনুযায়ী ফিল্টার

আপনি since এবং until প্যারামিটার ব্যবহার করে git log-এ কমিটের একটি রেঞ্জ পাস করতে পারেন। এই প্যারামিটারসের সিনট্যাক্স নিম্নরূপ:

মনে করুন আমরা কমিট b72beb5 পুশ হওয়ার পর থেকে এবং কমিট b53b22d পুশ হওয়ার আগে পর্যন্ত কমিটের তালিকা পেতে চাই। আমরা এই কমান্ড ব্যবহার করে এটি করতে পারি:

এই কমান্ড b72beb5 এবং b53b22d কমিটের মধ্যে সকল কমিটের তালিকা রিটার্ন করে।

মেসেজ অনুযায়ী ফিল্টার

–grep ফ্ল্যাগ আপনাকে git log দ্বারা রিটার্ন করা কমিটগুলো একটি নির্দিষ্ট কমিটের সাথে জড়িত কমিট মেসেজ অনুযায়ী ফিল্টার করতে দেয়।

উদাহরণস্বরূপ, মনে করুন আমরা "feat:" দিয়ে শুরু হওয়া মেসেজवाले সকল কমিটের তালিকা রিটার্ন করতে চাই। আমরা এই কোড ব্যবহার করে এটি করতে পারি:

এই কমান্ড "feat:" দিয়ে শুরু হওয়া মেসেজवाले সকল কমিটের তালিকা রিটার্ন করে।

git log আউটপুট ফরম্যাট করা

পূর্বের সেকশনে, আমরা git log কমান্ডের একটি ফুল আউটপুটের সাথে কাজ করেছি। এই আউটপুটে আমাদের কমিটের SHA, কমিট লেখক, কমিট পুশ করা তারিখ এবং কমিট মেসেজ ছিল।

যদিও এই সব তথ্য উপকারী, এমন অনেক случаে থাকে যেখানে আপনাকে শুধু একটি কমিট সম্পর্কে নির্দিষ্ট ডেটা রিট্রিভ করতে হয়। خوشকিসমتی, git log কমান্ডের সাথে কিছু ফ্ল্যাগ থাকে যা আপনি কমান্ডের আউটপুট ফরম্যাট করতে ব্যবহার করতে পারেন।

সংক্ষিপ্ত লগ রিটার্ন করুন

ডিফল্টভাবে, git log স্টেটমেন্ট প্রতিটি কমিটের জন্য একটি ফুল লগ এন্ট্রি রিটার্ন করে। আপনি --oneline ফ্ল্যাগ ব্যবহার করে কমিট ID এবং তাদের জড়িত কমিট মেসেজের একটি তালিকা রিট্রিভ করতে পারেন।

--oneline ফ্ল্যাগের সিনট্যাক্স:

আমাদের আগের রিপোজিটরিতে রান করলে, এই কমান্ড রিটার্ন করে:

43433c6 (HEAD -> master, origin/master, origin/HEAD) Update index.html
a7d8dc2 docs: Update README.md
b53b22d feat: Update website
3b16026 feat: Launch new homepage
b72beb5 first commit

আমরা কমিট ID এবং কমিটের সাথে জড়িত মেসেজের প্রথম লাইন দেখতে পাচ্ছি। এটি git log কমান্ড অন্যথায় রিটার্ন করবে সেই সকল মেটাডেটার চেয়ে পড়তে সহজ।

প্রতিটি এন্ট্রি একটি সিঙ্গল লাইনে থাকে। এই git log one line টেকনিক হ্যান্ডি কারণ এটি কমিট দেখায় খুব বেশি ইনফরমেশন ডিসপ্লে ছাড়া।

আউটপুট ডেকোরেট করা

--decorate ফ্ল্যাগ আপনাকে সকল রেফারেন্স (যינו ব্রাঞ্চ এবং ট্যাগ) দেখতে দেয় যেগুলো একটি নির্দিষ্ট কমিটকে পয়েন্ট করে। এই ফ্ল্যাগের সিনট্যাক্স:

এই কমান্ড রিটার্ন করে:

43433c6 (HEAD -> master, origin/master, origin/HEAD) Update index.html
a7d8dc2 docs: Update README.md
b53b22d feat: Update website
3b16026 (tag: v1) feat: Launch new homepage
b72beb5 first commit

আমাদের লিস্টের চতুর্থ কমিটে এখন এর ট্যাগের নাম স্পেসিফাই করা আছে।这是因为 --decorate ফ্ল্যাগ আমাদের কমিট হিস্টরিতে প্রতিটি কমিটের সাথে জড়িত রেফারেন্স রিভিল করে।

একটি ডিফ রিটার্ন করা

--stat ফ্ল্যাগ আপনাকে প্রতিটি কমিটে একটি রিপোজিটরিতে যোগ হওয়া এবং ডিলিট হওয়া কোড লাইনের সংখ্যা ডিসপ্লে করতে দেয়। এখানে git log --stat কমান্ডের একটি উদাহরণ:

Author: James Gallagher 
Date: Mon Apr 6 09:11:46 2020 +0100
feat: Update website
index.html | 1 +
index.js | 0
2 files changed, 1 insertion(+)

প্লাস সাইন (+) ইনসারশন ইন্ডিকেট করে, এবং, যদি কোনো থাকে, তবে মাইনাস সাইন (-) ডিলিশন ইন্ডিকেট করবে। এই ডেটা আপনাকে একটি রিপোজিটরিতে করা সামগ্রিক পরিবর্তন সম্পর্কে আরও জানতে সাহায্য করে।

আপনি যদি একটি রিপোজিটরিতে করা সঠিক পরিবর্তন দেখতে চান, তবে আপনি -p ফ্ল্যাগ ব্যবহার করতে পারেন। এটি একটি কমিটে করা পরিবর্তন দেখানো একটি আরও কম্প্রিহেনসিভ ডিফ রিটার্ন করে।

এখানে git log -p কমান্ড রান করার পর আমাদের উদাহরণ রিপোজিটরিতে থেকে একটি এন্ট্রি:

Author: James Gallagher <37276661+jamesgallagher432@users.noreply.github.com>
Date: Tue Apr 7 13:09:58 2020 +0100
Update index.html
diff --git a/index.html b/index.html
index f45673f..2d2701d 100644
--- a/index.html
+++ b/index.html
@@ -1,2 +1,3 @@
-This is a file.
-Changes have been made.
+
+ 

This is a website.

+

এই আউটপুট আমাদের কমিটের একটি ডেসক্রিপশন এবং কমিটে করা প্রতিটি পরিবর্তনের একটি ডিটেইলড ব্রেকডাউন উভয়ই দেখায়। আমরা দেখতে পাচ্ছি কবে লোকেরা আমাদের রিপোজিটরিতে ফাইল থেকে কন্টেন্ট যোগ বা রিমুভ করেছে।

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

Git diffs সম্পর্কে আরও পড়ুন আমাদের git diff কমান্ড গাইডে।

git shortlog কমান্ড

git shortlog কমান্ড একটি git log-এর সামারি প্রদান করে। git shortlog কমান্ডের আউটপুট লেখক অনুযায়ী গ্রুপ করা থাকে যার মানে আপনি সহজে দেখতে পারেন কে রিপোজিটরিতে কী পরিবর্তন করেছে।

চলুন আমাদের আগের রিপোজিটরিতে git shortlog কমান্ড রান করি:

আমাদের কমান্ড রিটার্ন করে:

James Gallagher (5):
first commit
feat: Launch new homepage
feat: Update website
docs: Update README.md
Update index.html

James এই রিপোজিটরিতে কন্ট্রিবিউট করার একমাত্র ব্যক্তি, এবং সে পাঁচ কমিট করেছে। কিন্তু, যদি অন্যান্য কন্ট্রিবিউটর থাকত, তবে তাদের কন্ট্রিবিউশনও এখানে লিস্টেড থাকত, পাশাপাশি তাদের পুশ করা কমিটের মোট সংখ্যা।

উপসংহার

git log কমান্ড আপনাকে দেখায় একটি রিপোজিটরিতে কী পরিবর্তন হয়েছে, কে করল এবং কখন। আপনি git log আউটপুট ফিল্টার করতে পারেন শুধু আপনার যা জানতে দরকার সেটি দেখাতে।

git log কমান্ড দুটি টাইপের ফ্ল্যাগের সাথে আসে। কিছু ফ্ল্যাগ লগের আউটপুট ফরম্যাট করতে সাহায্য করে। অন্যান্য ফ্ল্যাগ কমান্ড দ্বারা রিটার্ন করা কমিট ফিল্টার করতে সাহায্য করে।

এই টিউটোরিয়াল উদাহরণের রেফারেন্সে git log ব্যবহার এবং কমান্ডের সাথে ব্যবহৃত সবচেয়ে সাধারণ ফ্ল্যাগ কীভাবে ব্যবহার করবেন তা আলোচনা করেছে। git log কমান্ড Git-এ কাজ করার সময় আপনার আর্মোরিতে একটি গুরুত্বপূর্ণ টুল। একবার আপনি এই কমান্ডটি ইফেক্টিভলি ব্যবহার করতে জানলে, আপনি Git রিপোজিটরি ইনস্পেক্ট করার মাস্টার হবেন!

Git সম্পর্কে আরও জানতে, আমাদের How to Learn Git গাইড পড়ুন।

  1. পাইথনে বাইনারি ট্রিতে নোড এবং এর ডিসেন্ডেন্টের মধ্যে সর্বোচ্চ পার্থক্য বের করার প্রোগ্রাম

  2. জাভাস্ক্রিপ্টে image() অবজেক্ট

  3. Nethogs: লিনাক্সে প্রসেস অনুযায়ী রিয়েল-টাইম নেটওয়ার্ক ট্রাফিক মনিটরিং

  4. Matplotlib-এ অ্যাক্স ব্যাকগ্রাউন্ড কালার কীভাবে পরিবর্তন করবেন?