একটি নির্দিষ্ট ফাইল পরিবর্তন করে এমন সমস্ত কমিটের তালিকা দেওয়ার কোনও উপায় আছে কি?
একটি নির্দিষ্ট ফাইল পরিবর্তন করে এমন সমস্ত কমিটের তালিকা দেওয়ার কোনও উপায় আছে কি?
উত্তর:
--followএকটি নির্দিষ্ট ফাইলের জন্য কাজ
git log --follow -- filename
প্রদত্ত অন্যান্য সমাধানগুলির মধ্যে পার্থক্য
নোট করুন যে অন্যান্য সমাধানগুলি অন্তর্ভুক্ত git log path(ছাড়া --follow)। এই ডিরেক্টরিটি কার্যকর যদি আপনি কোনও ডিরেক্টরিতে যেমন উদাহরণ পরিবর্তনগুলি ট্র্যাক করতে চান তবে ফাইলগুলির নাম পরিবর্তন করা হলে হোঁচট খায় (এভাবে ব্যবহার করুন --follow filename)।
--followজন্য অ্যাকাউন্টস, তাই এটি এর চেয়ে বেশি শক্তিশালীgit log -- path
--followকোনও পথ গ্রহণ করে , যা একটি ফাইল হতে পারে তবে একটি ডিরেক্টরিও হতে পারে। পরবর্তী ক্ষেত্রে এটি পুনরাবৃত্তভাবে চলবে এবং এই পয়েন্টের নীচে সমস্ত ফাইলের পরিবর্তনের প্রতিবেদন করবে। (এই আচরণটি
git log filename?
git log filenameফাইল পুনঃনামকরনের অনুসরণ না, IE এটা যে সংক্রান্ত সব করে দেখাতে হবে ফাইলের নাম (প্রকৃত না ফাইল)। যদি আপনি ফাইলগুলি তৈরি করেন Xএবং Yউভয়ই পরিবর্তন করেন তবে মুছে ফেলা হয়েছে Yএবং এর নাম পরিবর্তন করা Xহয়েছে Yএবং এরপরে এটি পরিবর্তনও হয়েছে এবং আপনি চালনা করেন git log Y, আপনি পুরানো Y এবং নতুন উভয়ের জন্য বার্তা পাবেন । বিপরীত সঙ্গে --followআপনি যে ফাইলটি সম্বন্ধে যখন এটি নামে নামকরণ করা হয় করে পাবেন X এবং যখন এটি নামে নামকরণ করা হয় Y।
git log pathআপনি যা চান তা করা উচিত git logলোকটির কাছ থেকে :
[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion with
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.
আমি এটি ঘনিষ্ঠভাবে দেখছি এবং এই সমস্ত উত্তরগুলি সত্যই আমাকে সমস্ত শাখা জুড়ে সমস্ত প্রতিশ্রুতি দেখায় বলে মনে হচ্ছে না।
গিটক এডিট ভিউ অপশনগুলির সাথে চারপাশে জগাখিচু করে আমি যা এনেছি তা এখানে। এটি আমাকে শাখা, স্থানীয়, রিফ্লগ এবং রিমোট নির্বিশেষে কোনও ফাইলের জন্য সমস্ত চুক্তি দেখায় ।
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
এটি এর সাথেও কাজ করে git log:
git log --all --first-parent --remotes --reflog --author-date-order -- filename
--reflogমধ্যে এমন কমিটগুলি অন্তর্ভুক্ত রয়েছে যা পুনর্বাসিত / সংশোধিত বা অন্যথায় বাতিল করা হয়েছিল। সম্ভবত এটি সুস্পষ্ট হওয়া উচিত, তবে আমি git logএটির সাথে ব্যবহার করার চেষ্টা করেছি এবং কেন আমি আপাতদৃষ্টিতে সদৃশ কমিটগুলি দেখছি তা বোঝার চেষ্টা করছিলাম!
একটি নির্দিষ্ট ফাইলের জন্য কমিটগুলি পেতে নীচের কমান্ডটি ব্যবহার করুন:
git log -p filename
git log -p mybranch -- filenameবা কেবল git log --all -- filenameসমস্ত শাখায় দেখতে ব্যবহার করতে পারেন।
এটি যেমন সহজ হতে হবে git log <somepath>; ম্যানপেজটি পরীক্ষা করুন ( git-log(1))।
ব্যক্তিগতভাবে আমি ব্যবহার করতে পছন্দ করি git log --stat <path>তাই আমি ফাইলের প্রতিটি প্রতিশ্রুতির প্রভাব দেখতে পারি।
-pআপনি সম্পূর্ণ ভিন্নতা দেখতে চাইলেও, এটি কিছু সংখ্যক লাইন পরিবর্তন করেছে।
git showনির্দিষ্ট কমিটগুলিতে দেখতে যেমন তাদের মত লাগে ।
বিকল্পভাবে (গিট 1.8.4 সাল থেকে), কেবলমাত্র সমস্ত কমিটগুলি পাওয়া সম্ভব যা কোনও ফাইলের একটি নির্দিষ্ট অংশকে পরিবর্তিত করেছে । আপনি প্রারম্ভিক রেখা এবং শেষ লাইন নম্বরটি পাস করে এটি পেতে পারেন।
ফলস্বরূপ প্রত্যাবর্তিত প্রত্যাশীদের তালিকা যা এই বিশেষ অংশটি পরিবর্তন করে। কমান্ডটি এরকম হয়:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
যেখানে upperLimitহয় start_line_numberএবং lowerLimitহয়ending_line_number
আরও তথ্য - https://www.techpurohit.com/list-some-useful-git-commands
Jackrabb1t উল্লেখ করেছে --followযেহেতু এটি নাম / পদক্ষেপের বাইরে ইতিহাসের তালিকা অবিরত করা থেকে আরও শক্তিশালী। সুতরাং, আপনি যদি এমন কোনও ফাইল সন্ধান করছেন যা বর্তমানে একই পথে নেই বা এমন কোনও ফাইল সন্ধান করছেন যা বিভিন্ন কমিট জুড়ে নতুন নামকরণ করা হয়েছে, - ফলো এটি ট্র্যাক করবে।
আপনি নাম / পথের পরিবর্তনগুলি কল্পনা করতে চাইলে এটি আরও ভাল বিকল্প হতে পারে:
git log --follow --name-status -- <path>
তবে আপনি যদি কেবল গুরুত্বপূর্ণ বিষয়গুলি নিয়ে আরও কমপ্যাক্ট তালিকা চান:
git log --follow --name-status --format='%H' -- <path>
অথবা এমনকি
git log --follow --name-only --format='%H' -- <path>
ক্ষতিটি হ'ল --followকেবলমাত্র একটি একক ফাইলের জন্য কাজ করে।
--followএকটি একক পথের জন্য কাজ করে যা ডিরেক্টরি হতে পারে। যদি কোনও ডিরেক্টরি পাস করা হয় তবে এটি পুনরাবৃত্তভাবে চলবে এবং এই পয়েন্টের নীচে সমস্ত ফাইলের পরিবর্তনের প্রতিবেদন করবে।
আপনি যদি সমস্ত শাখায় একটি ফাইল পরিবর্তন করে এমন সমস্ত কমিটগুলি দেখতে চান তবে এটি ব্যবহার করুন:
git log --follow --all <filepath>
যদি আপনি কমিটগুলিতে করা সমস্ত পরিবর্তন দেখতে চান যা কোনও নির্দিষ্ট ফাইল বদলেছে (কেবলমাত্র ফাইলের মধ্যে পরিবর্তনের পরিবর্তে), আপনি পাস করতে পারেন --full-diff:
git log -p --full-diff [branch] -- <path>
[branch]
gitk <path_to_filename>
"Gitk" প্যাকেজটি ইতিমধ্যে ইনস্টল করা আছে বলে ধরে নেওয়া হচ্ছে।
যদি এটি ইনস্টল না করা থাকে তবে এটি করুন:
sudo apt-get install gitk
এবং তারপরে উপরের কমান্ডটি ব্যবহার করে দেখুন। এটি লিনাক্সের জন্য ... এটি জিএনআই চাইলে লিনাক্স ব্যবহারকারীদের সহায়তা করতে পারে।
gitkউইন্ডোজের জন্য গিটের সাথে বান্ডিল রয়েছে।
কেবল কমিট হ্যাশ ব্যবহারের একটি তালিকা পেতে git rev-list
git rev-list HEAD <filename>
আউটপুট:
b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d
যার অর্থ 5 টি কমিট এই ফাইলটিকে স্পর্শ করেছে। এটি বিপরীত কালানুক্রমিক ক্রম, সুতরাং তালিকার প্রথম প্রতিশ্রুতি b7c4f0d7সবচেয়ে সাম্প্রতিকতম।
লিনাক্সে আপনি এর জন্য গিটক ব্যবহার করতে পারেন।
এটি "sudo apt-get get git-gui gitk" ব্যবহার করে ইনস্টল করা যেতে পারে। এটি "gitk <Filename>" দ্বারা একটি নির্দিষ্ট ফাইলের কমিটগুলি দেখতে ব্যবহার করা যেতে পারে।
# Shows commit history with patch
git log -p -<no_of_commits> --follow <file_name>
# Shows brief details like "1 file changed, 6 insertions(+), 1 deletion(-)"
git log --stat --follow <file_name>