২.৩ গিট বেসিক – কমিট হিস্টোরি দেখা
কমিট হিস্টোরি দেখা
বেশ কিছু কমিট তৈরি করার পর অথবা একটি রিপোজিটরি ক্লোন করার পর এর এক্সিস্টিং কমিট হিস্টোরিগুলো হয়ত আপনি দেখতে চাইবেন, যাতে করে আপনি বুঝতে পারেন যে পূর্বে কি ঘটেছিল। এটি করার জন্য সবচাইতে পাওয়ারফুল টুল টি হলো git log কমান্ড। এই উদাহণগুলোতে simplegit নামক একটি সিম্পল প্রজেক্ট ব্যবহার করি। প্রজেক্ট টি ক্লোন করার জন্য এই কমান্ডটি রান করুন:
$ git clone https://github.com/schacon/simplegit-progit
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon
Date: Sat Mar 15 16:40:33 2008 -0700
Remove unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon
Date: Sat Mar 15 10:31:28 2008 -0700
Initial commit
আপনি আসলে যা খুঁজে বের করতে চান তা দেখানোর জন্য git log কমান্ড এ অনেকগুলো অপশন এভেইলেবল রয়েছে। এখানে আমরা কিছু পপুলার কমান্ড দেখব।
অপশনগুলোর মধ্যে একটি গুরুত্তপূর্ণ অপশন হল -p অথবা –patch, যা প্রত্যকটি কমিট-এর মধ্যে পার্থক্য দেখায়। আপনি ডিসপ্লে তে দেখানো লগ এন্ট্রি সংখ্যাগুলোর মধ্যে লিমিট দিতে পারবেন। যেমন -2 ব্যবহার করলে শুধুমাত্র শেষের দুইটি এন্ট্রি দেখাবে।
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "schacon@gee-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon
Date: Sat Mar 15 16:40:33 2008 -0700
Remove unnecessary test
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon
Date: Sat Mar 15 16:40:33 2008 -0700
Remove unnecessary test
lib/simplegit.rb | 5 -----
1 file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon
Date: Sat Mar 15 10:31:28 2008 -0700
Initial commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
অন্য আর একটি গুরুত্তপূর্ণ অপশন হল –pretty. এই অপশনটি ডিফল্ট লগ আউটপুট করে চেঞ্জ করে ফরম্যাটেড একটি আউটপুট দেখায়। ইউজ করার জন্য অল্প কিছু প্রিবিল্ড অপশন এভেইলেবল রয়েছে। oneline ভ্যালু টি প্রত্যেকটি কমিটকে একটি সিঙ্গেল লাইন এ দেখায়ে যেটি অনেকগুলো কমিট দেখার ক্ষেত্রে কাজে লাগে। অন্যদিকে short, full এবং fuller এই ভ্যালুগুলো সাধারণত একই ফরম্যাট এ আউটপুট দেখায় কিন্তু কিছু সংখ্যক কম বেশি ইনফরমেশন দেখায়।
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit
অপশন | আউটপুটের বর্ণনা |
%H | কমিট হ্যাশ |
%h | অ্যাব্রেভিয়েটেড কমিট হ্যাশ |
%T | ট্রি হ্যাশ |
%t | অ্যাব্রেভিয়েটেড ট্রি হ্যাশ |
%P | প্যারেন্ট হ্যাশ |
%p | অ্যাব্রেভিয়েটেড প্যারেন্ট হ্যাশ |
%an | অথোরের নাম |
%ae | অথোরের ইমেইল |
%ad | আথোর তারিখ |
%ar | অথোর তারিখ, রিলেটিভ |
%cn | কমিটারের নাম |
%ce | কমিটারের ইমেইল |
%cd | কমিটারের তারিখ |
%cr | কমিটারের তারিখ, রিলেটিভ |
%s | সাবজেক্ট |
oneline এবং format অপশনটি বিশেষ করে অন্য আর একটি log অপশন –graph ইউজ করে। এই অপশনটি আপনার ব্রাঞ্চ এবং মার্জ হিস্টোরি এবং একটি ছোট সুন্দর আসকি গ্রাফ দেখায়।
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
ওইগুলো শুধুমাত্র সিম্পল আউটপুট ফরম্যাটিং অপশন git log করার জন্য – এখানে আরও অনেক অপশন রয়েছে। কমন অপশনস git log লিস্ট এর কমন অপশনগুলো আমরা যতদূর সম্ভব কভার করেছি এর বাইরেও আরও কিছু ইউজফুল ফরম্যাটিং অপশন রয়েছে:
অপশন | বর্ণনা |
-p | প্রতিটি কমিটের সাথে সূচিত ট্যাগকে দেখানো |
–stat | প্রতিটি কমিটে ফাইল মোডিফাই এর পরিসংখ্যান |
–shortstat | –stat কমান্ড হতে পরিবর্তিত, যুক্ত, ডিলিটেড লাইন প্রদর্শন |
–name-only | কমিট ইনফরমেশন এর পর পরিবর্তিত ফাইলসমূহ প্রদর্শন |
–name-status | যেসকল ফাইলে পরিবর্তিত, যুক্ত, ডিলিটেড ইনফরমেশন আছে তাদের লিস্ট দেখানো |
–abbrev-commit | SHA-1 চেকসামের ৪০ টি ক্যারেক্টারের পরিবর্তে শুধুমাত্র প্রথম কয়েকটি ক্যারেক্টার দেখানো |
–relative-date | তারিখকে পুরো ফরম্যাটের পরিবর্তে শুধুমাত্র একটা রিলেটিভ ফরম্যাটে দেখানো (যেমন: “২ সপ্তাহ আগে”) |
–graph | লগ আউটপুটের সাথে ব্রাঞ্চ বা মার্জ হিস্টোরির আসকি গ্রাফ প্রদর্শন |
–pretty | ভিন্ন উপায়ে কমিট প্রদর্শন। অপশনে ওয়ানলাইন, শর্ট, ফুল, ফুলার এবং ফরম্যাট(যেখানে আপনি নিজস্ব ফরম্যাট স্পেসিফাই করতে পারবেন) যুক্ত থাকে |
লগ আউটপুট লিমিট করা
আউটপুট ফরম্যাটিং এর সাথে যোগ করে আরও বলা যায় যে, git log কিছু লিমিটিং অপশন নেয়, যা কমিট এর কিছু সাবসেট দেখায়। আপনি অলরেডি একটি অপশন উপরে দেখে এসেছেন। -2 অপশনটি, যেটি সর্বশেষ দুইটি কমিট দেখায়। আপনি অবশ্য- ইউজ করতে পারেন, যেখানে n হল একটি ইন্টিজার নাম্বার যা সর্বশেষ n টি কমিট দেখাবে। বাস্তবে হয়ত আপনি সচরাচর এটি ইউজ করবেন না, কারণ গিট বাই ডিফল্ট লগ আউটপুটের সময় পেজিনেশন করেই দেখায়। মানে হল, আপনি একই সময়ে মাত্র একটি পেইজ এর আউটপুটই দেখতে পাবেন। যাই হোক, টাইম লিমিট এর অপশনগুলো যেমন –since এবং –until এগুলো খুবই গুরুত্তপূর্ণ। উদাহরণস্বরূপ – এই কমান্ডটি লাস্ট উইক তৈরি হওয়া কমিটগুলো দেখায়:
$ git log --since=2.weeks
আপনি কমিটগুলোকে ফিল্টার এর মাধ্যমে দেখাতে পারেন যেটি কিছু নির্দিষ্ট ক্রাইটেরিয়া ম্যাচ করে। –author অপশনটি একটি স্পেসিফিক অথোর এর উপর ফিল্টার করতে দেয় এবং – –grep অপশনটি কিওয়ার্ডদিয়ে কমিট মেসেজগুলোতে সার্চ করতে দেয়।
$ git log -Sfunction_name
এবার git log থেকে আউটপুটের অপশন লিমিট করার জন্য গুলো আমরা লিস্ট করব এবং আরও কিছু কমন অপশন দেখবঃ
অপশন | বর্ণনা |
-(n) | শেষ n সংখ্যক কমিট প্রদর্শন |
–since, –after | নির্দিষ্ট তারিখের পরের কমিট দেখনো |
–until, –before | নির্দিষ্ট তারিখের পূর্ব পর্যন্ত কমিট দেখনো |
–author | যেসকল কমিটে অথোরের এন্ট্রি কোন নির্দিষ্ট স্ট্রিং কে ধারণ করে তাদের প্রদর্শন |
–committer | যেসকল কমিটে কমিটারের এন্ট্রি কোন নির্দিষ্ট স্ট্রিং কে ধারণ করে তাদের প্রদর্শন |
–grep | যেসকল কমিট মেসেজ সম্বলিত কমিট নির্দিষ্ট স্ট্রিং কে ধারণ করে তাদের প্রদর্শন |
-S | যেসকল কমিট নির্দিষ্ট স্ট্রিং ম্যাচ করে এমন কোড অ্যাড বা রিমোভ করে তাদের প্রদর্শন |
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch